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