如何从子组件更改父状态?
How to change parent state from child component?
我正在学习 react.js 并尝试做这样的事情:
我有带有 NumberLink 子组件的 NumberBox 组件。
NumberBox 有 val
个状态。
NumberLink 有 val
属性.
当我单击 NumberLink 时,我想将 NumberBox 状态更改为 link 的 val
属性,但在控制台中我得到:
Uncaught TypeError: this.props.onNumberLinkClick is not a function.
你能告诉我我做错了什么吗?
这是代码:https://jsfiddle.net/ym58zcv4/1/
您正在通过 undefined
获得 onNumberLinkClick
道具。
使用 Array.prototype.map()
的第二个参数在执行回调时提供 this
值:
var numberLinks = this.props.data.map(function (number) {
return (
<NumberLink val={number} key={number} onNumberLinkClick={this.handleNumberLinkClick}/>
);
}, this)
工作fiddle:https://jsfiddle.net/ym58zcv4/3/
使用 strict mode 会将此类情况转化为运行时错误,因此更容易发现。
您也可以使用 ES6 arrow functions (which preserve the current value of this
automatically) by enabling the React JSX transformer's harmony
mode, or using Babel 作为您的转译器:
var numberLinks = this.props.data.map(number =>
<NumberLink val={number} key={number} onNumberLinkClick={this.handleNumberLinkClick}/>
)
您还在 handleNumberLinkClick
函数中以错误的方式设置状态
this.setState({val:number})
应该是 this.setState({number:val})
我正在学习 react.js 并尝试做这样的事情: 我有带有 NumberLink 子组件的 NumberBox 组件。
NumberBox 有 val
个状态。
NumberLink 有 val
属性.
当我单击 NumberLink 时,我想将 NumberBox 状态更改为 link 的 val
属性,但在控制台中我得到:
Uncaught TypeError: this.props.onNumberLinkClick is not a function.
你能告诉我我做错了什么吗? 这是代码:https://jsfiddle.net/ym58zcv4/1/
您正在通过 undefined
获得 onNumberLinkClick
道具。
使用 Array.prototype.map()
的第二个参数在执行回调时提供 this
值:
var numberLinks = this.props.data.map(function (number) {
return (
<NumberLink val={number} key={number} onNumberLinkClick={this.handleNumberLinkClick}/>
);
}, this)
工作fiddle:https://jsfiddle.net/ym58zcv4/3/
使用 strict mode 会将此类情况转化为运行时错误,因此更容易发现。
您也可以使用 ES6 arrow functions (which preserve the current value of this
automatically) by enabling the React JSX transformer's harmony
mode, or using Babel 作为您的转译器:
var numberLinks = this.props.data.map(number =>
<NumberLink val={number} key={number} onNumberLinkClick={this.handleNumberLinkClick}/>
)
您还在 handleNumberLinkClick
函数中以错误的方式设置状态
this.setState({val:number})
应该是 this.setState({number:val})