Redux Connect 与 Container 的区别

阅读时长 5 分钟读完

在 React/Redux 的开发中,我们常常需要将组件和 Redux 的 store 进行连接,以便于组件能够获取 store 中的数据并进行渲染。这时候我们会用到 react-redux 中的两个重要的概念:connectContainer

什么是 Redux Connect

connectreact-redux 中提供的一个高阶函数,它的作用是将组件和 Redux 的 store 进行连接,使组件能够获取 store 中的数据并进行渲染。

connect 函数的用法如下:

-- -------------------- ---- -------
------ - ------- - ---- --------------

----- --------------- - ------- -- --
  -- -------------------- ----- ------
  -- ------- ----- ------
  ------ ------------
---

----- ------------------ - ---------- -- --
  -- -------------------- ----- ------
  -- ------------- -------- ------
  ---------- -- -- ---------- ----- ----------- ---
---

----- ----------- - -- ------ --------- -- -- -
  ------ -
    -----
      --------- -----------
      ------- --------------------------------------
    ------
  --
--

------ ------- ------------------------ ---------------------------------

在上面的例子中,mapStateToProps 函数用于将 store 中的 count 属性映射到组件的 count 属性上,mapDispatchToProps 函数用于将一个 increment 函数映射到组件的 increment 属性上,该函数用于 dispatch 一个 INCREMENT 的 action。

什么是 Container

Containerreact-redux 中提供的一个组件,它的作用是将组件和 Redux 的 store 进行连接,使组件能够获取 store 中的数据并进行渲染。

Container 组件的用法如下:

-- -------------------- ---- -------
------ - --------- - ---- --------------

----- --------------- - ------- -- --
  -- -------------------- ----- ------
  -- ------- ----- ------
  ------ ------------
---

----- ------------------ - ---------- -- --
  -- -------------------- ----- ------
  -- ------------- -------- ------
  ---------- -- -- ---------- ----- ----------- ---
---

----- ----------- - -- ------ --------- -- -- -
  ------ -
    -----
      --------- -----------
      ------- --------------------------------------
    ------
  --
--

----- ----------- - ----------------------------- ---------------- --------------------

------ ------- ------------

在上面的例子中,mapStateToProps 函数用于将 store 中的 count 属性映射到组件的 count 属性上,mapDispatchToProps 函数用于将一个 increment 函数映射到组件的 increment 属性上,该函数用于 dispatch 一个 INCREMENT 的 action。

从上面的例子中,我们可以看出 connectContainer 的用法非常相似,它们都是将组件和 Redux 的 store 进行连接,使组件能够获取 store 中的数据并进行渲染。那么它们的区别在哪里呢?

其实,它们的本质是一样的,都是将组件和 Redux 的 store 进行连接。但是,它们的实现方式不同。

connect 是一个高阶函数,它接收一个组件作为参数,并返回一个新的组件,这个新的组件会将 store 中的数据作为 props 传递给原来的组件。这种方式更加灵活,可以在任何地方使用。

Container 是一个组件,它接收一个组件作为参数,并返回一个新的组件,这个新的组件会将 store 中的数据作为 props 传递给原来的组件。这种方式更加固定,只能在特定的地方使用。

另外,Container 的实现是基于 connect 的,它实际上就是对 connect 的封装。因此,Container 具有 connect 的所有功能,但是它还提供了一些额外的功能,比如 shouldComponentUpdate 方法的优化。

总结

connectContainer 都是将组件和 Redux 的 store 进行连接的方式,它们的本质是一样的,但是它们的实现方式不同。connect 是一个高阶函数,它接收一个组件作为参数,并返回一个新的组件;Container 是一个组件,它接收一个组件作为参数,并返回一个新的组件。另外,Container 的实现是基于 connect 的,它具有 connect 的所有功能,但是它还提供了一些额外的功能,比如 shouldComponentUpdate 方法的优化。

在实际开发中,我们可以根据情况选择使用 connectContainer,但是需要注意它们的使用方式和区别。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/657d438ed2f5e1655d811614

纠错
反馈