Javascript 在构造函数中调用React函数后未设置状态

Javascript 在构造函数中调用React函数后未设置状态,javascript,reactjs,Javascript,Reactjs,我目前正在做一个ReactJS项目,遇到以下问题: 每当我试图让函数changeState()通过在构造函数中调用来更改应用程序的状态时,它都失败了。然而,如果我尝试在任何其他地方调用它,它确实会改变状态 代码如下: class App extends React.Component { constructor(props) { super(props) this.state = { elems: [] } this.changeState

我目前正在做一个ReactJS项目,遇到以下问题:

每当我试图让函数
changeState()
通过在构造函数中调用来更改应用程序的状态时,它都失败了。然而,如果我尝试在任何其他地方调用它,它确实会改变状态

代码如下:

class App extends React.Component {
    constructor(props) {
        super(props)
        this.state = { elems: [] }
        this.changeState() // This doesn't work
    }

    changeState() {
        this.setState({
            elems: ['new', 'elem']
        })
    }

    render() {
        return (
            <div>
                { this.changeState() /* This works */ }
                {this.state.elems}
            </div>
        )
    }
}
类应用程序扩展了React.Component{
建造师(道具){
超级(道具)
this.state={elems:[]}
this.changeState()//这不起作用
}
变更状态(){
这是我的国家({
元素:[“新”,“元素”]
})
}
render(){
返回(
{this.changeState()/*这可以工作*/}
{this.state.elems}
)
}
}

提前感谢

既然可以在构造函数中设置状态,为什么要调用该函数

class App extends React.Component {
    constructor(props) {
        super(props)
        this.state = { elems: ['new', 'elem'] }
    }


    render() {
        return (
            <div>
                 {/* This wont work since changeState will cause an infinite loop because setState triggers a render and render triggers a setState */}
                {/* this.changeState()  */ }
                {this.state.elems}
            </div>
        )
    }
}
类应用程序扩展了React.Component{
建造师(道具){
超级(道具)
this.state={elems:['new','elem']}
}
render(){
返回(
{/*这不起作用,因为changeState将导致无限循环,因为setState触发渲染,而render触发setState*/}
{/*this.changeState()*/}
{this.state.elems}
)
}
}

在组件装载和呈现之前调用
构造函数
,因此您可以直接在构造函数中设置状态。看

这就是在
构造函数中设置状态的方法:

constructor(props) {
  super(props);
  this.state = { elems: ['new', 'elem'] };
}

对于面临相同问题的任何人,我找到的最佳解决方案是在
componentDidMount
中调用函数,它解决了在
render
中调用时不更新状态和无限循环的问题


感谢所有帮助过我的人,特别感谢和指出问题并帮助我找到解决方案;)

看看react生命周期方法。为什么要在构造函数中调用该方法?(不是将状态初始化为开始时所需的值?
{this.changeState()/*this works*/}
将创建另一个问题无限循环检查控制台,以了解有关错误的详细信息。我在设置状态之前点击一个API,该API将在程序期间多次点击(因此需要单独的函数)。我之前做过一个教程,在那里我被教导做一些与此非常相似的事情,而状态实际上发生了变化。对于无限循环信息,我不知道:)对API的调用应该在
componentDidMount
中完成。此外,如果您提供一个更接近实际用例的示例,您将得到更有用的答案。我们无法知道
changeState
正在从其他地方获取状态。