是否可以将Immutable.js Map转换为react组件中的Object ?



我在我的应用程序中使用redux和Immutable.js,在我开始开发项目几周后,我在应用程序中添加了Immutable.js,因为我不想将我当前的组件更改为Immutable. get()语法,所以在我的组件内部使用它们之前,我将商店中的Immutable Maps转换为对象。例:

@connect((store) => {
  return {
    login: store.login.toObject(),
    user: store.user.toObject()
  };
})

这是一个不好的做法吗?这是否与我的应用性能有关?

是的,这是一个非常糟糕的做法。为了让Immutable将你的Immutable映射转换成JavaScript,它必须遍历整个对象;这将是缓慢的。此外,你正在失去在React和Redux中使用ImmutableJS的大量实际价值。具体来说,您现在可以不再短路不必要的重新渲染与shouldComponentUpdate的简单实现。

如果你想使用不可变js Maps,但不想使用get语法,你可以使用Records。它们具有Maps的所有功能,除了任意值键(访问器语法无论如何都无法工作)。

一个简单的例子:

// Specify the allowed fields and their default values
const TodoListState = Immutable.Record({ todos: undefined, filter: undefined })
// Instantiate the record using `new` and an object with the desired KV mapping
const initialTodoState = new TodoListState({ 
  todos: Immutable.List(),
  filter: undefined, // this is already the default, but I prefer being explicit
})
const initialTodos = initialTodoState.todos // List()

相关内容

  • 没有找到相关文章

最新更新