javascript - 传递给反应组件子级的函数不接收函数上下文
问题描述
我在使用 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>
)
让我知道可以做些什么来将额外的上下文传递给子组件,或者是否有更好的方法来做到这一点。
谢谢,你们都很聪明。
解决方案
在您的Content
类的构造函数中,尝试使用以下方法将您的 toggleComponent 函数绑定到类.bind()
:
constructor(props) {
super(props);
this.state = {
name: "React",
toggle: true,
...
};
this.toggleComponent = this.toggleComponent.bind(this);
}
默认情况下,类方法不“绑定”到类。这意味着您的this
关键字 intoggleComponent
不引用Content
该类,直到您使用.bind()
.
希望这可以帮助!
更多信息可以在这里找到:https ://reactjs.org/docs/handling-events.html
推荐阅读
- javascript - 表格数据在新标签中展开
- c - 如何使用 SDL 在 C 中单击鼠标时调用函数?
- java - 在androidx(Android studio java)中声明的不属于这个FragmentManager的目标片段
- python - 为什么1不等于1?
- javascript - 无法从 CSS Create React App 中的公用文件夹导入
- pyspark - Hive 插入创建与 Spark 插入不同的镶木地板
- node.js - 如何在猫鼬事务中使用 deleteMany
- git - git branch new_branch VS git checkout -b new_branch
- angular - Angular Material 基本对齐、大小、浮动工具类
- php - 需要用于访问PHP 中的对象?