ReactJS映射函数找不到未定义的属性
ReactJS map function cannot find property of undefined
我还在学习ReactJS。我正在挑战自己写一个非常基本的待办事项应用程序(就像一个人一样),我在调用onClick函数时遇到了一个问题。
var List = React.createClass({
handleClick: function () {
alert("Clicked!");
},
render: function () {
var list = this.props.items;
var items = list.map(function(item){
return (
<li style={{borderBottom:'1px solid red'}}>
<label onClick={this.handleClick}>
<input type="checkbox" />
{item}
</label>
</li>
);
});
return (
<ul>{items}</ul>
)
}
});
这里的问题是onClick={this.handleClick}
不能被调用,因为它不在渲染函数的返回调用中。
我需要做什么才能从map函数内部访问handleClick ?
map
函数的第二个参数是用于定义的值在执行回调时,this
的作用域。:
.map(callback(currentValue, index, array), value_for_this/scope_to_run_in)
所以你可以修改你的map
函数如下:
var items = list.map(function(item){
return (
<li style={{borderBottom:'1px solid red'}}>
<label onClick={this.handleClick}>
<input type="checkbox" />
{item}
</label>
</li>
);
}, this);
您也可以使用箭头函数,其中
this
在其中隐式绑定:
var items = list.map((item) => {
return (
<li style={{borderBottom:'1px solid red'}}>
<label onClick={this.handleClick}>
<input type="checkbox" />
{item}
</label>
</li>
);
});
您遇到的问题是,您对list.map
的调用将使用与render
方法不同的this
调用传递的函数。
一个简单的修复方法是在外部作用域中获取this
并将其存储在一个变量中,然后在内联函数中使用该变量。
render: function () {
var self = this;
// ^^^^^^^^^^^^^^^^
var list = this.props.items;
var items = list.map(function(item){
return (
<li style={{borderBottom:'1px solid red'}}>
<label onClick={self.handleClick}>
// ^^^^
<input type="checkbox" />
{item}
</label>
</li>
);
});
return (
<ul>{items}</ul>
)
}
您应该显式地将this
绑定到handleClick
函数,以引用React组件而不是map函数,因此您可以按照以下方式重构代码:
var items = list.map(renderListItem.bind(this));
和添加renderListItem
方法在你的React类如下:
renderListItem(item) {
return (
<li style={{borderBottom:'1px solid red'}}>
<label onClick={this.handleClick}>
<input type="checkbox" />
{item}
</label>
</li>
);
}
相关文章:
- 主干中的模型属性未定义
- JavaScript 2d 数组导致“无法读取未定义的属性'未定义'”
- JSON对象属性未定义
- Waypoint的循环,退出循环后属性未定义
- Javascript:错误“无法设置属性”..'未定义”
- 翡翠 - 显示对象属性 - 未定义
- 属性未定义,但控制台.log可以看到它
- JavaScript 对象的属性未定义
- Javascript 对象属性未定义(但属性已设置)
- DOM 元素属性未定义 - jquery / ruby on rails.
- Nodejs JSON 属性未定义
- 错误:窗口打开器的属性未定义
- angular Js:Array.lenght属性未定义
- 正在尝试访问JavaScript对象的属性=未定义
- Marionette属性未定义,请从API获取
- AngularJS作用域属性未定义
- 对象的属性未定义,尽管已指定值
- 为什么我一直收到一个错误,说对象属性未定义
- 对象属性未定义,但我看到它不是
- .map()img src属性未定义