javascript - 如何从子组件更改父状态?

标签 javascript reactjs this

我正在学习 react.js 并尝试做这样的事情: 我有带有 NumberLink 子组件的 NumberBox 组件。

NumberBox 有 val 状态。

NumberLink 具有 val 属性。

当我单击 NumberLink 时,我想将 NumberBox 状态更改为链接的 val 属性,但在控制台中我得到:

Uncaught TypeError: this.props.onNumberLinkClick is not a function.

你能告诉我我做错了什么吗? 这是代码:https://jsfiddle.net/ym58zcv4/1/

最佳答案

您正在为 onNumberLinkClick 属性传递 undefined

将第二个参数用于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 (自动保留 this 的当前值)通过启用 React JSX 转换器的 harmony 模式,或使用 Babel作为你的转译器:

var numberLinks = this.props.data.map(number =>
  <NumberLink val={number} key={number} onNumberLinkClick={this.handleNumberLinkClick}/>
)

关于javascript - 如何从子组件更改父状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30393397/

相关文章:

javascript - 函数内的 'this' 不应该指向对象本身吗?

javascript - 以下 Javascript 函数如何影响 'this' 的值?

c# - 'this'在C#语言中有什么用?

javascript排序稀疏数组保持索引

javascript - 检查 2 个字段的空间

asp.net - DELETE 返回错误 405(方法不允许)我正在使用 React 和 ASP.Net Core

javascript - form.submit 回调未被调用

javascript - jquery "this"事件处理程序的绑定(bind)问题(相当于原型(prototype)中的 bindAsEventListener)

javascript - JQuery Draggable with Touch Punch 停止垂直滚动

javascript - 匹配对象 ObjectId 以使用其 "matching"数据