【发布时间】:2020-07-02 02:11:24
【问题描述】:
非常简单。我正在制作一个按钮来根据输入栏中输入的内容更改我父母的状态。在用户键入代码并单击 enter 后,将调用一个 for 循环,该循环遍历数组以确保用户输入的代码存在于数组中。如果代码存在,则调用 this.setState 并更改父级的状态。
但是,在将函数从父组件传递到按钮组件后,如果我什至在输入字段中输入数组中的字符串,我会自动得到一个错误:超出最大更新深度,说明组件重复调用setState - 但是,这甚至是不可能的,因为我还没有点击按钮,所以 for 循环甚至不应该在使用中。 (好吧,我可能不知道为什么要这样做)
这是父母:
constructor(props){
super(props);
this.state = {
roomList: [],
activeRoom: undefined
};
this.onUpdateRooms = this.onUpdateRooms.bind(this);
}
//function for changing state
onJoinRoom(roomCode) {
for(let i = 0; i < this.state.roomList.length; i++){
if (this.state.roomList[i].roomCode === roomCode) {
this.setState({activeRoom: roomCode});
console.log('Found')
}
}
}
//within the render
<JoinButton onJoinRoom={this.onJoinRoom}/>
这是我的按钮类:
constructor (props) {
super(props)
this.state = {
enteredCode: ''
}
}
handleInput(e) {
this.setState({enteredCode: e.target.value});
}
handleClick() {
this.props.onJoinRoom(this.state.enteredCode);
}
render() {
return (
<div>
<input
className="roomCodeInput"
type='text'
placeholder='Enter A Room Code'
onChange={this.handleInput.bind(this)}
value={this.state.enteredCode}
/>
<button className="join" onClick={this.handleClick(this)}>JOIN</button>
</div>
);
}
我做了一些研究,人们说这个错误的一个原因是在渲染方法中调用函数(即 onClick={this.props.function()} 而不是没有括号的 .function)。但是,我正在使用 handleClick 并绑定它,所以我不相信我的问题是一样的。另外,我需要传递函数参数,所以括号是必要的。
现在真的很困惑,希望得到一些帮助:/
【问题讨论】:
-
onClick={()=>this.handleClick(this)} -
虽然我不知道你为什么要传递
this,因为你可以全局访问它并且你没有在函数中的任何地方使用它 -
啊,我以为这就是您绑定事物的方式...我在引用另一个项目的语法,他们也在这样做 xD。
标签: javascript reactjs jsx