在反应中,如何将immutableJS与Normalizr集成

时间:2018-01-16 16:00:01

标签: reactjs immutable.js normalizr

我们正在考虑在我们的项目中使用immutableJS和Normalizr,但我们面临的一系列挑战让我们不知所措。

  1. 当谈到状态转换时,例如,当来自服务器的Ajax响应到达时,我应该首先将响应转换为immutableJS(Record,List,Map)还是先使用Normalizr执行Normalize

  2. 为了享受这些好处,我们已经决定使用immutableJS,但是应该在整个反应项目中使用immutableJS数据形状(immutableJS(Record,List,Map))(例如{{1}中的所有状态在Redux& Smart component&其他dumb component中的& UI状态 或仅仅在props中使用它是相当的,并且在反应组件内仍然应该使用普通对象?

2 个答案:

答案 0 :(得分:0)

我没有使用Normalize,也没有使用immutableJS。但自称如何说,immutableJS是使数据不可变。

  1. 所以我认为你必须首先进行标准化,然后进行make immutableJS。
  2. 我认为你应该在整个项目中使用immutableJS,因为反应状态变量应该是不可变的。

答案 1 :(得分:0)

我面临着同样的决定,看起来普遍认为,在不可改变之前是正常的,但问题是

  1. 我可能会失去对normalizr函数的访问权限,尤其是当我想对不可变状态执行linq-like或ramda动作时
  2. 我可能必须始终在某些点使用禁止的.toJS将数据恢复为normalizr格式
  3. 我相信,使用normalizr第一种方法并且不必担心上述困境,事情仍然可以有效地完成,但这只会意味着在这种情况下使用normalizring只作为模式定义库

    你怎么看?

    标准化第一种方法here

    的工作示例

    =============================================== ============================

    这就是我要做的事情

    1. 我建议您首先进行标准化,因为您将在您的州中拥有准备/定义的数据形状。我不知道你的反应形态,但我总是建议除非你有一个深度嵌套的数据或几乎没有模式的数据,否则不需要normalizr。
    2. 一旦您决定将immutableJS注入您的应用程序,您将不得不格外小心地将其限制在特定范围内。我还建议您将其范围限定在redux状态和智能组件UI状态中。你可能想要避免它在你的哑组件,虽然这些基本上是为了表示目的,很少或没有额外的逻辑。
    3. PS:我有一个遗留项目,我试图将ImmutableJS和normalizr集成到代码中,因为我的所有UI和redux状态都是纯JS对象,我决定将ImmutableJS形状移植到由d管理的redux树中combinedReducer。这给了我一个具有不同reducer对象类型的redux状态。