我有一个子容器。该子容器处理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/

10-09 22:26