我有一个子容器。该子容器处理states
,它也从父容器接收一些props
。我有两个select语句,它们onChange
在子容器中设置state
。由于某些原因,setState()
导致容器重新呈现。奇怪的是,render()
和我的setState()
代码仅被调用一次。 (我添加了调试器进行检查)。请在下面找到我的“选择”组合框代码:
<Select
native
name="evidenceNode"
value={nodeType}
onChange={this.handleChange('nodeType')}
className={classes.textField}
>
<option />
{NODE_TYPE.map(function (item, i) {
return <option key={i} value={item}>{item}</option>
})}
</Select>
<Select
native
name="modelType"
value={modelType}
onChange={this.handleChange('modelType')}
className={classes.textField}
>
<option />
{MODEL_TYPE.map(function (item, i) {
return <option key={i} value={item}>{item}</option>
})}
</Select>
这是我的handleChange函数:
handleChange = name => event => {
this.setState({
[name]: event.target.value,
});
};
我怀疑这是一个很小的解决方案,但我不知道我要去哪里错了。
我尝试过的事情:
更改我将句柄更改为箭头功能的方式,但没有用
我删除了其中一个Select语句,然后尝试再次运行,它正常工作。
我试图从Select语句之一中删除
handleChange
调用,它工作正常。我还要提到:我有一个
componentWillReceiveProps
函数(不确定是否重要)componentWillReceiveProps(nextProps, nextContext) {
if(nextProps.selectedNode !== this.state.selectedNode){
this.setState({
selectedNode: nextProps.selectedNode
});
}
}
最佳答案
问题是onChange={this.handleChange('modelType')}
。
您没有附加事件,而是在使用该方法调用方法。
因此,您进入了无限循环。this.handleChange('modelType')
发生重新渲染,然后再次调用this.handleChange('modelType')
... etc
在onChange
事件上附加一个调用handleChange
的匿名函数onChange={e => this.handleChange('modelType', e)}
并更改handleChange
params声明:handleChange = (name, event) => {}
关于javascript - react “超出最大更新深度。”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54834882/