【问题标题】:How to mute the state in reactjs如何在reactjs中静音状态
【发布时间】:2018-10-12 20:07:59
【问题描述】:

我在 reactjs 状态管理中遇到问题。每次加载组件时,它都会从缓存中加载数据。我对此进行了研究,发现状态是不可变的。我想问一下如何使用不可变状态。 目前,就像我在构造函数中的状态中获取了一个空数组然后我在组件中调用了一个 api 并将该状态设置为响应,但直到除非 Indont 清除缓存,否则状态不会显示数据

指导我在哪里犯错或如何使状态不受影响

【问题讨论】:

  • 不看一些代码就很难说。但一般来说,如果您想更改状态,只需将其设置为空字符串或您选择的其他内容,这样从状态中提取的数据就不会从更改中加载
  • 问题是setstate后数据没有加载,缓存清除后数据正在加载
  • 没有代码或示例我们无能为力,顺便说一句,状态应该被视为“不可变”,但我仍然很困惑 unmute 状态是什么意思。你的意思是回滚数据?
  • 请原谅改变了问题。看看
  • 好吧,我想你在问为什么this.state = xxx 不起作用?

标签: reactjs state-management react-state-management


【解决方案1】:

改变对象:使用 Object.assign({}, ...)

var yourCar = {
color: 'red',
.. the same as neighboursCar
};

var neighboursCar = {
 color: 'red',
... the same as yourCar
};

yourCar.color = 'blue'; // reference stays the same!

var yourCarRepainted = Object.assign({}, yourCar, { color: 'blue' });

yourCarRepainted === yourCar; // false

改变数组:使用 [].concat

var list = [1, 2, 3];
var list = [1, 2, 3];
list[1] = 4;

var list = [1, 2, 3];
var changedList = [].concat(list);
changedList[1] = 4;

var list = [1, 2, 3];
var changedList = [].concat(list);
changedList[1] = 2;

list === changedList; // false

this.state 和 this.setState({}) 在 React 中已经是不可变的了。

您也可以尝试 immutable.js 3rd 方库来更好地掌握这个主题。

【讨论】:

    猜你喜欢
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 2016-11-21
    • 1970-01-01
    相关资源
    最近更新 更多