【发布时间】:2020-08-19 13:47:03
【问题描述】:
我在使用 react 时卡住了,其中,我将一个函数从父组件传递给多个子组件。该函数调用也驻留在父组件中的其他函数。
子组件确实成功启动了函数,但不幸的是,函数失败了,因为它似乎与子元素中的上下文不同,例如。它开始调用存储在父元素中的其他函数,并接收 undefined。这很奇怪,因为错误来自父组件文件,而不是子组件文件。
我不确定是否将所有函数都传递给子元素,这感觉相当笨重,而且感觉我仍然会丢失重要的函数上下文。
我已经测试过在父组件上运行相同的函数,它没有任何问题,几乎就像父组件的函数上下文没有传递给子组件,只有函数本身。
对吗?
这是一个示例,其中子组件有一个可单击的按钮,该按钮将运行从父组件传递的功能,包括从父组件中运行其他功能、更新状态和进行更改等。
父元素:
class Content extends Component {
constructor(props) {
super(props);
this.state = {
name: "React",
toggle: true,
...
};
}
toggleComponent(name) {
this.toggling(name); // THIS IS WHERE THE ERROR OCCURS ON THE CHILD ELEMENT, undefined.
}
toggling(name) {
does some stuff...
}
render() {
return (
<Comp toggleComponent={this.toggleComponent}/>
)
}
子元素:
class Demo1 extends Component {
constructor(props) {
super(props);
this.state = {
name: "React"
};
}
render() {
return (
<div className="button" onClick={() => this.props.toggleComponent('theCompName')}>Continue</div>
)
让我知道如何将额外的上下文传递给子组件,或者是否有更好的方法来做到这一点。
谢谢,你们都很聪明。
【问题讨论】:
-
您是否尝试过使用箭头语法来定义您的方法?
-
或者,构造函数中的
this.toggleComponent.bind(this) -
对不起,
this.toggleComponent = this.toggleComponent.bind(this) -
@WillD 我没试过,这样定义功能有什么区别?
-
“箭头函数没有自己的
this。使用了封闭词法范围的this值”来自:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
标签: javascript reactjs components undefined react-props