如何将setthis回调与“ this”绑定。反应允许吗?
this.state = {
selectedId: null,
}
//On click of some list item as
<ListGroup.Item
action href=""
key={id}
onClick={()=>
this.setState({selectedId: id.ID}), () => console.log(this.state.selectedID)
}
>
LIST ITEM
</ListGroup.Item>)
答案 0 :(得分:1)
您需要绑定onClick
而不是setState
,以便在绑定的onClick
调用setState
时,它可以“提供”此内容以进行呼叫。在React类组件中,像onClick
这样的处理程序都绑定在构造函数中:
class BindingExample extends React.Component {
constructor(props) {
super(props);
this.state = { selectedId: null }
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
this.setState( prevState => (...prevState, { selectedId: id.ID }),
() => console.log(this.state.selectedID)
);
}
render() {
return (
<>
<button onClick={this.handleClick}>
Click me
</button>
</>
);
}
}
如果onClick
被实现为粗箭头功能
handleClick = () => {
this.setState( prevState => (...prevState, { selectedId: id.ID }),
() => console.log(this.state.selectedID)
);
}
那么就不需要绑定它了,因为粗箭头功能总是可以捕获它。 附带说明一下,类组件目前在React中已经过时了。
答案 1 :(得分:1)
您在此处错误地实现了callback
中的setState
,
onClick={()=>
this.setState({selectedId: id.ID}), () => console.log(this.state.selectedID)
}
您的setState本身在这里结束,
this.setState({selectedId: id.ID}) //This is complete setState
如果要将callback
添加到setState
,则需要将其写在setState
内,
onClick={()=>
this.setState({
selectedId: id.ID
}, () => console.log(this.state.selectedId) //This is callback
) //end of setState
} //end of onClick
注意:您正在打印this.state.selectedID
,但在状态下您有selectedId
。
答案 2 :(得分:0)
运行内联回调箭头功能时,无需绑定this
。
您的代码存在问题,因为您有2个功能
onClick={()=> this.setState({selectedId: id.ID})
//// this line is wrong
, () =>
////
console.log(this.state.selectedID)}
将您的onClick代码更改为此:
onClick={()=> {
this.setState({selectedId: id.ID});
console.log(this.state.selectedID)
}
}
这似乎也是错误的。
this.state = {
selectedId: null,
}
将其更改为此:
state = {
selectedId: null,
}
希望这会有所帮助。