什么是 Redux?
Redux 是一个 JavaScript 应用程序状态管理库,它用于管理随时间变化的应用程序状态。它可以与任何 JavaScript 应用程序一起使用,但它与 React 组件非常配合,因为它们都使用相同的数据流模式。
在 Redux 中,状态被存储在单个对象中,这个对象被称为“store”。 React 组件可以获取并使用该状态,通过“actions”来修改该状态。 一个 action 是一个纯 JavaScript 对象,其中包含将要对状态做出的更改。 在 Redux 中,应用程序发布一个 action,然后 Redux 中的 Reducer 进行计算并返回新的应用程序状态。
为什么要用 Immutable 数据?
Redux 与 Immutable.js 的结合使用是一个很普遍的选择。 Immutable 数据的好处是它们是不可变的,这意味着数据一旦被创建就不能被修改。这些数据可以被在应用程序的整个生命周期中被安全的使用。这使得数据很容易缓存,回滚和跟踪更改。
由于它们不可变,我们可以在两个不同的组件之间共享它们,并且不必担心其中一个组件意外更改这些数据的值。如果有需要对这些数据进行更改,一定要使用 Immutable 的 API 来进行更新。举个例子:使用 Immutable.Map.set
方法来实现更新一个 key 对应的值。
如何在 Redux 中管理 Immutable 数据
Redux 默认是使用普通的 JavaScript 对象来管理应用程序状态的,但由于我们可以选择结合 Immutable.js 的使用,我们也可以使用 Immutable 对象来存储状态。下面展示了如何使用 Immutable.js 来创建一个 Redux Store.
-- -------------------- ---- ------- ------ - ----------- - ---- -------- ------ - ------ - ---- ------------ ----- ------------ - -------- ------ - - ----- ---------- ------ --------------------- -- - ----- -------- ------ ------------------- -- -- --- -------- ------------- - ------------- ------- - ------ ------------- - ---- ----------- ------ --------------------- ------- -- ------------------------------------ -------- ------ ------ - - ----- ----- - ---------------------
在上面的代码中,我们将我们的应用程序状态存储在一个 Immutable Map 中,并在 Reducer 中使用 Immutable API 来操作我们的数据。
store.getState()
方法将返回不可变的对象,因此我们需要使用 Immutable.js API 来访问状态中的各个部分。
console.log(store.getState().get('users').toJS()); // 输出 [{ name: 'Maarten', email: 'maarten@example.com' }, { name: 'Alice', email: 'alice@example.com' }]
最后,如果我们需要修改状态,我们需要 dispatch 一个 Action 来告诉 Reducer 我们需要更新应用程序状态。
store.dispatch({ type: 'ADD_USER', payload: { name: 'Bob', email: 'bob@example.com', }, });
在上面的代码中,我们 dispatch 了一个 ADD_USER Action,它会将一个新用户添加到我们的状态中。
总结
Redux 是一个非常好的状态管理库,而结合 Immutable.js 的使用更是提高了数据的高效性和安全性。Immutable 的数据不仅是不可变的,还有能够轻松回滚、跟踪更改,而且在共享数据方面使用起来更加的安全性。
总之,Redux + Immutable.js 的组合是非常强大和常用的,我们需要熟练的掌握其中的使用技巧,以便更加高效、简洁的构建我们的应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6532347f7d4982a6eb4874b1