首页 > 解决方案 > 数组类型变量在 setState 上更改为字符串

问题描述

如何让状态和数组始终如一地工作?

结果如此混乱和不一致。

这是状态:

 this.state = {
            tutorSubjects: [],

        };

这是设置状态;第一个 console.log 将主题记录在一个数组中,第二个日志和空数组:

            const name = target.name;
            if (name === "tutorSubjects") {
                let subjects = this.state.tutorSubjects.concat(value);
                console.log(subjects)
                this.setState({
                    tutorSubjects: subjects
                },  console.log(this.state.tutorSubjects))
            }

这将提交和记录主题作为没有数组的字符串:

    handleSubmit = e => {
        console.log(this.state.tutorSubjects)
}

我的主要目标是向服务器发送一个数组,现在它正在发送一个字符串。

我不知道为什么,但是现在我已经将状态更改为subjects并更新了如下状态,它可以完美运行。

            if (name === "tutorSubjects") {
                let subjects = this.state.subjects.concat(value);
                console.log(subjects)
                this.setState({
                    subjects
                }, console.log(this.state.subjects))
            }

标签: javascriptreactjsstate

解决方案


回调参数setState应该是一个回调函数,但您没有以这种方式提供它,而是您立即评估并在被调用之前console.log(...)显示它。 setState

通过确保它在以下之后运行来修复它:

this.setState({ subjects }, () => console.log(this.state.subjects));

您的原始代码大致相当于:

let v = console.log(this.state.subjects);
this.setState({ subjects }, v);

当以这种方式表达时,显然这是不正常的。


推荐阅读