Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 将事件从子元素传递给曾祖父_Reactjs_React Native - Fatal编程技术网

Reactjs 将事件从子元素传递给曾祖父

Reactjs 将事件从子元素传递给曾祖父,reactjs,react-native,Reactjs,React Native,我刚开始熟悉这本书。使用这样的设置,我可以将一个偶数从一个子项传递给它的父项: 儿童: <TouchableOpacity onPress={() => {this.props.click("Cool.")}}> {this.props.click(“Cool.”)}> 家长: constructor(props) { super(props); this.click = this.click.bind(this) } click(c) { console.l

我刚开始熟悉这本书。使用这样的设置,我可以将一个偶数从一个子项传递给它的父项:

儿童:

<TouchableOpacity onPress={() => {this.props.click("Cool.")}}>
{this.props.click(“Cool.”)}>
家长:

constructor(props) {
  super(props);
  this.click = this.click.bind(this)
}

click(c) {
  console.log(c) // "Cool."
}

render() {
  return (
    <View>
      <Child click={this.click}>
    </View>
  }
}
构造函数(道具){
超级(道具);
this.click=this.click.bind(this)
}
点击(c){
console.log(c)/“酷。”
}
render(){
返回(
}
}
但是,如果我将父对象的返回更改为:

<View>
  <Child click={this.props.click}>
</View>

然后使用一个组件:

<View>
  <Parent click={this.click}>
</View>

我没有收到click事件,但是出现了一个错误
“\u this2.props.click不是一个函数”
将子元素更改为
似乎会阻止处理该事件


最后,我想让一个子元素触发曾祖父级别的事件处理程序,以修改根级别的状态并向下级联更改。

您可以使用
ref
访问子元素的方法。您可以在中查看此文档。使用
ref
的简单示例如下所示:

class Child extends Component {
  open = () => {
    this.props.setVisible(true)
  }

  render () { 
    <View ref={this.props.refFunc}>
      ...
    </View>
  }
}

class Parent extends Component {
  _ref = (e) => { this._child = e }

  runFunction = () => {
    this._child.open(); // you can use the open function of child here
  }

  render () { 
    ...
    <Child refFunc={this._ref}>
    ...
  }
}

通过这种方式,您可以从子组件访问父状态。

您可以使用
ref
访问子组件的方法。您可以在中查看此文档。使用
ref
的简单示例如下:

class Child extends Component {
  open = () => {
    this.props.setVisible(true)
  }

  render () { 
    <View ref={this.props.refFunc}>
      ...
    </View>
  }
}

class Parent extends Component {
  _ref = (e) => { this._child = e }

  runFunction = () => {
    this._child.open(); // you can use the open function of child here
  }

  render () { 
    ...
    <Child refFunc={this._ref}>
    ...
  }
}

通过这种方式,您可以从子组件访问父状态。

您可以绑定父组件中的
单击
函数,但希望祖父知道它?如果您希望在
祖父组件中调用该操作,您应该在那里绑定该函数并将其向下传递generations@Nocebo你能详细介绍一下吗子组件,我使用的是
onPress={()=>{this.props.click(“Cool.”}}>
它通过this.props将事件传递给父组件。然后在父组件中,我使用的是
click={this.props.click}
我认为它会传递到下一代,在那里我会绑定
click={this.click.bind(this)}
哦,那么你的描述有点让人困惑。你说的是“家长:”,我认为你的
家长组件
如下。但实际上那是你的
祖父母,而
是你的实际
家长组件。你可能想更改组件的标签:)您绑定了
父项中的
单击
函数,但希望祖父知道吗?如果希望在
祖父中调用操作,则应将函数绑定到此处,并将其传递给generations@Nocebo你能详细介绍一下吗?在子组件上,我使用的是
onPress={()=>{this.props.click(“Cool.”}>
,它通过this.props将事件传递给父组件。然后在父级中,我使用了
click={this.props.click}
,我认为这会让它再上一代,在那里我会有绑定
click={this.click.bind(this)}
哦,那么你的描述有点混乱。你说的是“家长:”我还以为你的
家长组件现在就在后面了。但实际上,这实际上是你的
祖父母
,而
是你的实际
父母
组成部分。您可能需要更改组件的标签:)这将允许我从父级使用子级函数(例如Open),而我希望在子级收到类似于我在第一个示例中使用的事件时,让子级修改父级、父级的父级状态,将事件从子级向上传递给父级。一旦我尝试向上传递到父级的父级(在传递到父级的父级的过程中),它将不再执行。您可以使用此方法更改父级的父级的状态。我已使用此方法更改了逐子组件的父组件的父组件的父组件的状态,它工作正常。如果您愿意,可以使用代码更新您的问题,我可以更好地帮助您。我将此标记为已回答,但会发布更简洁的后续内容。感谢您帮助我了解这一点。这将允许我使用来自父对象的子对象函数(例如Open),而我希望在子对象收到类似于我在第一个示例中使用的事件时,让子对象修改父对象、父对象的父对象状态,将事件从子级向上传递给父级。一旦我尝试向上传递到父级的父级(在传递到父级的父级的过程中),它将不再执行。您可以使用此方法更改父级的父级的状态。我已使用此方法更改了逐子组件的父组件的父组件的父组件的状态,它工作正常。如果您愿意,可以使用代码更新您的问题,我可以更好地帮助您。我将此标记为已回答,但会发布更简洁的后续内容。谢谢你帮我走过这段路。