【问题标题】:Referencing a parent's event handler within the render() block在 render() 块中引用父事件处理程序
【发布时间】:2017-09-11 17:34:11
【问题描述】:

我有一个带有onPress() 事件处理程序的子图标元素:

render() {
  return (
    <TouchableOpacity onPress={this.props.press}>
  )
}

这个孩子的 IconWrapper 父组件正在传递 press 函数:

render() {
  return (
    <View>
      <Icon press={this.props.press} />
      <Icon press={this.props.press} />
      <Icon press={this.props.press} />
    </View>
  )
}

然后,我从祖父母渲染父 IconWrapper 组件:

render() {
  return (
    <View>
      <IconWrapper press={this.press} />
    </View>
  )
}

IconWrapper press 函数不会向下传播到 Icon。我相信我需要将此函数附加到外部视图组件,然后使用视图作为参考,例如:

render() {
  return (
    <View ref="outerView" press={this.props.press}>
      <Icon press={this.refs.outerView.press} />
      <Icon press={this.refs.outerView.press} />
      <Icon press={this.refs.outerView.press} />
    </View>
  )
}

或者也许:

render() {
  return (
    <View ref="outerView">
      <Icon press={this.refs.outerView.props.press} />
      <Icon press={this.refs.outerView.props.press} />
      <Icon press={this.refs.outerView.props.press} />
    </View>
  )
}

我将如何在 render() 块中引用父级的事件处理程序?

【问题讨论】:

    标签: reactjs react-native


    【解决方案1】:

    在您的IconWrapper 中将类的引用绑定到函数。这应该可以在不必使用refs 的情况下工作。

    render() {
      return (
        <View>
          <IconWrapper press={this.press.bind(this)} />
        </View>
      )
    }
    

    【讨论】:

    • 知道了,这行得通。我认为我的问题一直是我最初使用click 作为我的属性(认为在移动触摸驱动的环境中不会有任何点击属性)......但是使用click 作为属性而不是@ 987654326@ 似乎实际上阻止了事件被拾取(调试器中没有真正显示任何东西。)从一开始就不起作用让我重新考虑继承模型。酷!
    猜你喜欢
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 2022-06-18
    • 2013-02-02
    相关资源
    最近更新 更多