Immutable.js 将获取的数据转换为不可变的

Immutable.js converting fetched data to immutable

我正在构建一个类似于 TodoList 的简单 React Flux js 应用程序,其基本功能在于对某些实体进行 CRUD 操作。当应用程序启动时,它从服务器获取数据并显示项目列表,然后我可以使用表单创建新项目、编辑和删除。我决定尝试 Immutable.js 方法,但遇到了一个问题:我应该何时以及将哪些数据转换为不可变对象。例如,当我获取列表时,我将其设为不可变(Immutable.fromJS())然后分配给商店的状态,对吧?但随后我创建了新项目,从表单字段中获取普通对象,并且应该以某种方式 post 将此数据发送到服务器。为了避免再次加载列表,我想将这个新项目添加到不可变的商店列表中。那么当我必须将一些对象转换为不可变的以供应用程序使用,并使用普通 json 获取数据并将数据发送到服务器时,我应该如何处理这种情况?

您想使所有对象不可变。只有在需要将其发送到服务器时才将其转换为可变对象。由于您从服务器返回了一个普通的 JSON 对象,因此在获取它时将其转换为不可变对象。

当您创建一个新项目时,您还需要一个不可变的对象,并将其发送到商店。所以商店的状态只是一个不可变向量中的一堆不可变对象。您需要向服务器发送 JSON 对象这一事实是与服务器通信的一个实现细节,只有处理通信的 store/service 才知道。

所以流程是:

  1. 从服务器获取项目作为 JSON 对象数组
  2. 将 JSON 数组转换为不可变记录的不可变向量
  3. 将该不可变向量传递给您的组件以渲染它们
  4. 当 editing/creating 新项目时,确保只处理不可变记录(即,在组件中的 this.state 上保留不可变 newItem 记录,并在 this.state 上更新该记录表单字段更改)。
  5. 当用户点击保存时,将 this.state.newItem 发送到商店,商店将项目添加到其不可变向量并将其转换为 JSON 并将其发送到服务器。