如何将immutable.js映射清除回其默认值

时间:2016-10-31 19:10:41

标签: redux immutable.js

我有一个immutable.js地图。例如:

//默认,当用户第一次登录页面时

var myObject = Immutable.Map({
  productID: '',
  colors: ['brown', 'red'],
  sku: ''
  sizes: [10]
})

现在,根据他们如何访问我的应用程序 - 我使用不同的数据填充“myObject”上方。

所以,例如:让我们说它们来自pathA // pathA传递一些数据......给myObject加水合

var myObject = Immutable.Map({
  productID: '090ABl',
  colors: ['brown', 'red', 'yellow'],
  sku: '__whatever'
  sizes: [10, 18, 9]
})

所以,例如:让我们说它们来自pathB

**这是问题的来源。我之前有myObject的“状态”。我需要“清除并回到初始状态”。我正在使用redux。

// pathB传入一些数据......给myObject加水合

var myObject = Immutable.Map({
  productID: '090XZLG',
  colors: ['red', 'yellow'],
  sku: '__food'
  sizes: [9]
})

数据正在梳理等等。我需要它“清除”。好奇,如果有一个Immutable.js方法,它允许用新的方法刷新myObject,这与初始状态相同。我是immutable.js的新手,所以我有点好奇为什么它很难做简单的事情: - )

2 个答案:

答案 0 :(得分:0)

immutable.js对象不知道'它的默认值是什么'是的,所以没有办法重置它。如果您的应用程序中有一个默认对象,请在变量中保留对它的引用,就像它是一个普通的JavaScript对象一样:

var defaultObject = Immutable.Map({
  productID: '',
  colors: ['brown', 'red'],
  sku: ''
  sizes: [10]
})

然后,当用户到达某个路径时,您只需进行修改并将其保存在不同的变量中:

var myObject = defaultObject.set(...);

答案 1 :(得分:0)

在redux中为状态对象使用不可变对象时,在我的许多化简器中,我set都使用某个键来表示初始状态下的get。 即:

function reeducer(state = initialState, action) {
  switch (action.type) {
    ...
    case CLEAR_SELECTION:
      return state.set('selected', initialState.get('selected'));
    ...
  }
}

当然,为了使其更简洁(特别是避免重复字符串),可以为此创建一个函数:

function resetKey(state, initialState, key) {
    return state.set(key, initialState.get(key));
}

(或者也可以称为copyKey或copySection) 也可以是resetPath / copyPath

function resetPath(state, initialState, path) {
    return state.setIn(key, initialState.getIn(path));
}