在 React/Redux 的开发中,我们常常需要将组件和 Redux 的 store 进行连接,以便于组件能够获取 store 中的数据并进行渲染。这时候我们会用到 react-redux
中的两个重要的概念:connect
和 Container
。
什么是 Redux Connect
connect
是 react-redux
中提供的一个高阶函数,它的作用是将组件和 Redux 的 store 进行连接,使组件能够获取 store 中的数据并进行渲染。
connect
函数的用法如下:
-- -------------------- ---- ------- ------ - ------- - ---- -------------- ----- --------------- - ------- -- -- -- -------------------- ----- ------ -- ------- ----- ------ ------ ------------ --- ----- ------------------ - ---------- -- -- -- -------------------- ----- ------ -- ------------- -------- ------ ---------- -- -- ---------- ----- ----------- --- --- ----- ----------- - -- ------ --------- -- -- - ------ - ----- --------- ----------- ------- -------------------------------------- ------ -- -- ------ ------- ------------------------ ---------------------------------
在上面的例子中,mapStateToProps
函数用于将 store 中的 count
属性映射到组件的 count
属性上,mapDispatchToProps
函数用于将一个 increment
函数映射到组件的 increment
属性上,该函数用于 dispatch 一个 INCREMENT
的 action。
什么是 Container
Container
是 react-redux
中提供的一个组件,它的作用是将组件和 Redux 的 store 进行连接,使组件能够获取 store 中的数据并进行渲染。
Container
组件的用法如下:
-- -------------------- ---- ------- ------ - --------- - ---- -------------- ----- --------------- - ------- -- -- -- -------------------- ----- ------ -- ------- ----- ------ ------ ------------ --- ----- ------------------ - ---------- -- -- -- -------------------- ----- ------ -- ------------- -------- ------ ---------- -- -- ---------- ----- ----------- --- --- ----- ----------- - -- ------ --------- -- -- - ------ - ----- --------- ----------- ------- -------------------------------------- ------ -- -- ----- ----------- - ----------------------------- ---------------- -------------------- ------ ------- ------------
在上面的例子中,mapStateToProps
函数用于将 store 中的 count
属性映射到组件的 count
属性上,mapDispatchToProps
函数用于将一个 increment
函数映射到组件的 increment
属性上,该函数用于 dispatch 一个 INCREMENT
的 action。
从上面的例子中,我们可以看出 connect
和 Container
的用法非常相似,它们都是将组件和 Redux 的 store 进行连接,使组件能够获取 store 中的数据并进行渲染。那么它们的区别在哪里呢?
其实,它们的本质是一样的,都是将组件和 Redux 的 store 进行连接。但是,它们的实现方式不同。
connect
是一个高阶函数,它接收一个组件作为参数,并返回一个新的组件,这个新的组件会将 store 中的数据作为 props 传递给原来的组件。这种方式更加灵活,可以在任何地方使用。
Container
是一个组件,它接收一个组件作为参数,并返回一个新的组件,这个新的组件会将 store 中的数据作为 props 传递给原来的组件。这种方式更加固定,只能在特定的地方使用。
另外,Container
的实现是基于 connect
的,它实际上就是对 connect
的封装。因此,Container
具有 connect
的所有功能,但是它还提供了一些额外的功能,比如 shouldComponentUpdate
方法的优化。
总结
connect
和 Container
都是将组件和 Redux 的 store 进行连接的方式,它们的本质是一样的,但是它们的实现方式不同。connect
是一个高阶函数,它接收一个组件作为参数,并返回一个新的组件;Container
是一个组件,它接收一个组件作为参数,并返回一个新的组件。另外,Container
的实现是基于 connect
的,它具有 connect
的所有功能,但是它还提供了一些额外的功能,比如 shouldComponentUpdate
方法的优化。
在实际开发中,我们可以根据情况选择使用 connect
或 Container
,但是需要注意它们的使用方式和区别。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/657d438ed2f5e1655d811614