[英]How to access state inside function which is inside of function inside of map
我正在尝试使.map方法的每个项目都具有onClick效果,如下所示:
this.props.products.map(function(item, i) { return ( <tr key={ i } onClick={ function() { console.log(arrayForOnClick) arrayForOnClick = [item['id'], item['name'], item['price']] this.handleTableString(item['id'], item['name'], item['price']) // Нужно передать айди, имя и цену в модальное окно при клике на этот <tr>. } }> <td>{ item['id'] }</td> <td>{ item['name'] }</td> <td>{ item['price'] }</td> </tr> ) }, this)
我正在尝试访问this.handleTableString
handleTableString(id, name, price) { this.setState({ editProductModal: true, selectedId: id, selectedName: name, selectedPrice: price }) console.log('triggered') }
但是我收到了Uncaught TypeError: Cannot read property 'handleTableString' of null
错误Uncaught TypeError: Cannot read property 'handleTableString' of null
是否还有另一种方法可以使onClick或我的代码有问题?
问题是, this
是对每个不同的function
(它不保存您的嵌套函数)。 你可以。
this
进行引用。 。
this.props.products.map(function(item, i) {
const self = this;
return (
<tr key={ i } onClick={ function() {
console.log(arrayForOnClick)
arrayForOnClick = [item['id'], item['name'], item['price']]
self.handleTableString(item['id'], item['name'], item['price'])
// Нужно передать айди, имя и цену в модальное окно при клике на этот <tr>.
} }>
<td>{ item['id'] }</td>
<td>{ item['name'] }</td>
<td>{ item['price'] }</td>
</tr>
)
}, this)
this
箭头函数 ,以便在父上下文中查找它。 。
this.props.products.map(function(item, i) {
return (
<tr key={ i } onClick={ () => {
console.log(arrayForOnClick)
arrayForOnClick = [item['id'], item['name'], item['price']]
this.handleTableString(item['id'], item['name'], item['price'])
// Нужно передать айди, имя и цену в модальное окно при клике на этот <tr>.
} }>
<td>{ item['id'] }</td>
<td>{ item['name'] }</td>
<td>{ item['price'] }</td>
</tr>
)
}, this)
在没有正确绑定上下文的情况下,请勿创建匿名函数。 在这种情况下也可以使用箭头功能:
this.props.products.map(function(item, i) {
return (
<tr key={ i } onClick={() => {
const arrayForOnClick = [item['id'], item['name'], item['price']]
this.handleTableString(item['id'], item['name'], item['price'])
} }>
<td>{ item['id'] }</td>
<td>{ item['name'] }</td>
<td>{ item['price'] }</td>
</tr>
)
}, this)
问题是在您的onClick
内联函数中this
是null。 所以,你需要分配onClick
给一个函数this
已经使用javascript明确设置bind
方法。
<tr key={ i } onClick={
function() {
console.log(arrayForOnClick)
arrayForOnClick = [item['id'], item['name'], item['price']]
this.handleTableString(item['id'], item['name'], item['price'])
}.bind(this)
}>
...
</tr>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.