我正在尝试对.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
还有另一种方法可以使onClick或我的代码出错吗?
答案 0 :(得分:0)
不要像正在做的那样创建匿名函数而不正确绑定上下文。在这种情况下使用箭头功能也更清洁:
$this->snows
答案 1 :(得分:0)
问题是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
的{{3}},以便在父上下文中查找。
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)
答案 2 :(得分:0)
问题是this
内联函数中onClick
为空。因此,您需要将onClick
分配给使用javascript this
方法明确设置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>
答案 3 :(得分:0)
在JavaScript中this
内部函数可以绑定到god-know-what,具体取决于它的调用方式。您的代码this
中的代码this.handleTableString(item['id'], ...
未指向该组件。
使用ES6 arrow functions作为map
和onClick
的处理程序,或者使用this-that trick,以防您被迫使用ES5语法,并且可以&#t; t / don&# 39;显然想要使用转发器(Babel)。