javascript - react : how to update states which have both mutable and immutable values

标签 javascript reactjs immutability

在 JavaScript 中,string, integer and boolean values are immutable, but objects and arrays are mutable.

如果状态具有两种类型的值,我们应该如何更新 React 中的状态?

例如

constructor(props) {
    super(props);
    this.state = {
        success: false,
        error: false,
        errorMessages: {}
    };
}

假设您需要立即更新所有属性(successerrorerrorMessages),最好的方法是什么实现了吗?

至少我确信 errorMessages 不应该直接更新,因为它本质上是可变的,但是其余的呢?

我尝试了类似以下的操作,但最终得到了错误的结果。

const errorMessages = {
    ...this.state,
    "errorMessages": error.response.data,
};

this.setState({
    errorMessages,
    success: false,
    error: true,
});

//The errorMessages property will have "success" and "error" property in it

最佳答案

只要您为 errorMessages 提供新值,React 就会正确更新状态。你不会直接在这里改变状态,你只是为字段提供一个新值,React 将进行必要的改变:

this.setState({
   errorMessages: error.response.data
   success: false,
   error: true,
});

关于javascript - react : how to update states which have both mutable and immutable values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46800259/

相关文章:

reactjs - mapStateToProps 根本没有被调用

javascript - 如何在 NextJS 中将 next-iron-session 与自定义 api 路由中间件一起使用?

reactjs - @reach/router - 路径更新但单击链接时组件不呈现

java - 为什么可变字符串会导致安全问题?

c++ - 功能/不可变数据结构在非垃圾收集上下文中是否仍然对并发有用?

javascript - 如何在没有突变的情况下使用 javascript Map

javascript - 使用嵌入在显示的 EPUB3 电子书中的 Javascript 使 iBooks 翻页(在回流模式下)

javascript - JS - 检查数字是否在文本中

javascript - NodeJS x-ray web-scraper : how to follow links and get content from sub page

string - Go 中的不可变字符串