Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 错误:setState(…):获取要更新的状态变量对象或返回状态变量对象的函数_Javascript_Reactjs_React Redux_React Router - Fatal编程技术网

Javascript 错误:setState(…):获取要更新的状态变量对象或返回状态变量对象的函数

Javascript 错误:setState(…):获取要更新的状态变量对象或返回状态变量对象的函数,javascript,reactjs,react-redux,react-router,Javascript,Reactjs,React Redux,React Router,它给了我这个.state.correct+1和这个.state.correct+1的其他部分的错误 我看到了这一点,但没有解决我的问题 您需要更新状态,因为您定义的状态是一个对象。您需要知道要更新的对象的哪个属性,如下所示 if (choice == this.state.dataset[this.state.current].correct) { this.setState({correct: this.state.correct + 1}) } els

它给了我这个.state.correct+1和这个.state.correct+1的其他部分的错误

我看到了这一点,但没有解决我的问题


您需要更新状态,因为您定义的状态是一个对象。您需要知道要更新的对象的哪个属性,如下所示

if (choice == this.state.dataset[this.state.current].correct) {
            this.setState({correct: this.state.correct + 1})
        } else {
            this.setState({incorrect: this.state.incorrect + 1})
        }
医生

更新

由于@titus更新了注释,正确的方法如下所示,因为react将prevState对象分隔开,该对象具有组件的prev状态

this.setState(prevState => ({correct: prevState.correct + 1}))

您需要更新状态,因为您定义的状态是一个对象。您需要知道要更新的对象的哪个属性,如下所示

if (choice == this.state.dataset[this.state.current].correct) {
            this.setState({correct: this.state.correct + 1})
        } else {
            this.setState({incorrect: this.state.incorrect + 1})
        }
医生

更新

由于@titus更新了注释,正确的方法如下所示,因为react将prevState对象分隔开,该对象具有组件的prev状态

this.setState(prevState => ({correct: prevState.correct + 1}))
在react中,setState接受对象或异步函数。你两个都没有用。在您的情况下,如果需要更新需要使用的状态值

this.setState({correct: this.state.correct + 1});
使用这种方式设置状态值时也要小心,因为setState是异步操作,可能无法保证立即获取状态变量的值。如果要使用setState的值,请使用带有setState的异步回调

在react中,setState接受对象或异步函数。你两个都没有用。在您的情况下,如果需要更新需要使用的状态值

this.setState({correct: this.state.correct + 1});
使用这种方式设置状态值时也要小心,因为setState是异步操作,可能无法保证立即获取状态变量的值。如果要使用setState的值,请使用带有setState的异步回调



我认为您需要向SetState发送一个带有键和值的对象。请发布更多代码以更好地理解该问题。@AnkitaKuchhadiya DILEEPTHOMAS解决了我的问题,谢谢@shivlalkumavat我还发布了一个详细的答案,以获取更多的知识。我认为您需要向SetState发送一个带有键和值的对象。请发布更多代码以更好地理解该问题。@AnkitaKuchhadiya DILEEPTHOMAS解决了我的问题,谢谢@shivlalkumavat我还发布了一个详细的答案,以获取更多的知识。当新状态从上一个状态派生出来时,您应该使用带有函数的setState作为第一个参数,例如:this.setStateprevState=>{correct:prevState.correct+1}由于状态未更新,使用prevState.correct和this.state.correct是否有任何差异@Titus@shivlalkumavat很乐意帮忙,如果它对您有效,请接受:有一种解释是,当前设置的状态可以是异步的,而同步不是,因为当我们在承诺级别内设置状态时,它将是同步的,而在正常事件处理程序中,它将是异步的,因此这将通过使用并发模式进行更改,@titus这是否正确当新状态从上一个状态派生时,应使用带有函数的setState作为第一个参数,例如:this.setStateprevState=>{correct:prevState.correct+1}由于状态未更新,使用prevState.correct和this.state.correct有什么区别吗@Titus@shivlalkumavat很乐意帮忙,如果它对您有效,请接受:有一种解释是,当前设置的状态可以是异步的,而同步不是因为当我们在承诺级别内设置状态时,它将是同步的,而在正常事件处理程序中,它将是异步的,所以这将被更改。我使用并发模式作出反应17,这是否正确@TitusOkay,我得到,谢谢大家!@shivlalkumavat很乐意帮忙好的,我明白了,谢谢@shivlalkumavat很乐意帮忙