为什么不在状态更新?

问题描述 投票:0回答:1

我有一个更新状态的改变,并增加了一个值的功能,但在“addResponse”功能状态通常不会更改:

handleSelected (e, item) {
    this.setState({
        current_component_id: item.id,
    }, () => this.addResponse()
    );
};

调用函数上面:

addResponse (e) {
    const { enrollment_id, evaluation_id, user_id, question_id, current_component_id, 
    responses, current_question, current_question_id 
    } = this.state;
    console.log(current_component_id)

    if (current_component_id != 0) {

        const newResponse = {
            enrollment_id: enrollment_id,
            evaluation_id: evaluation_id,
            user_id: user_id,
            question_id: current_question_id,
            answer_component: current_component_id,
        };

        function hasAnswer(res) {
            const list_question_id = res.map((item) => {
                return item.question_id
            });
            if (list_question_id.includes(current_question_id)) {
                return true
            } else {
                return false
            }
        }

        if (responses === undefined) {
            this.setState({
                responses: [newResponse]
            } 
            , () => console.log('---------> primeiro', this.state.responses)
            )
        } else {
            const check = hasAnswer(responses);
            if (check) {
                this.setState(prevState => {
                    prevState.responses.map((item, j) => {
                        if (item.question_id === current_question_id) {
                            return item.answer_component = current_component_id
                        }
                        return item ;
                    })
                }
                , () => { console.log('----> questao alterada ', this.state.responses)}
                )

            } else {
                this.setState({
                    responses: [...this.state.responses, newResponse]
                    }
                    , () => console.log('------> questao nova', this.state.responses)
                    );
            }
        }
    }

    // this.nextQuestion();
};

第一的console.log永远是正确的,但其他人不经常改变的,我知道的setState是ASYN,但是我觉得作为我称之为addResponse功能这将是异步

reactjs
1个回答
0
投票

有一个在你如何调用setStatecheck是真正的问题。

它应该是

this.setState(prevState => ({
  responses: prevState.responses.map((item, j) => {
               if (item.question_id === current_question_id) {
                 item.answer_component = current_component_id
               }
               return item ;
             })
})
, () => { console.log('----> questao alterada ', this.state.responses)}
)
© www.soinside.com 2019 - 2024. All rights reserved.