react-redux

11 篇文章 0 订阅

React Redux是啥

React Redux是Redux的官方React绑定。它使您的React组件可以从Redux存储中读取数据,并向存储分派操作以更新数据

这里需要再强调一下:Redux 和 React 之间没有关系。Redux 支持 React、Angular、Ember、jQuery 甚至纯 JavaScript。
尽管如此,Redux 还是和 React 和 Deku 这类库搭配起来用最好,因为这类库允许你以 state 函数的形式来描述界面,Redux 通过 action 的形式来发起 state 变化。

容器组件和展示组件

react-redux是基于 容器组件和展示组件相分离的开发思想

在这里插入图片描述

UI 组件负责 UI 的呈现,容器组件负责管理数据和逻辑。

如果一个组件既有 UI 又有业务逻辑,那怎么办?回答是,将它拆分成下面的结构:外面是一个容器组件,里面包了一个UI 组件。前者负责与外部的通信,将数据传给后者,由后者渲染出视图。

React-Redux 规定,所有的 UI 组件都由用户提供,容器组件则是由 React-Redux 自动生成。也就是说,用户负责视觉层,状态管理则是全部交给它。

大部分的组件都应该是展示型的,但一般需要少数的几个容器组件把它们和 Redux store 连接起来。这和下面的设计简介并不意味着容器组件必须位于组件树的最顶层。如果一个容器组件变得太复杂(例如,它有大量的嵌套组件以及传递数不尽的回调函数),那么在组件树中引入另一个容器

connect()

connect()函数将React组件连接到Redux存储。
它为连接的组件提供了存储中所需的数据片段,以及可用于将操作分配给存储的功能。

它不会修改传递给它的组件类。而是返回一个新的,已连接的组件类,该类包装您传入的组件。

function connect(mapStateToProps?, mapDispatchToProps?, mergeProps?, options?)

connect 接受四个参数,均为可选参数

  • mapStateToProps?: Function
  • mapDispatchToProps?: Function | Object
  • mergeProps?: Function
  • options?: Object

mapStateToProps?: (state, ownProps?) => Object

它是一个函数,建立一个从(外部的)state对象到(UI 组件的)props对象的映射关系。
mapStateToProps执行后应该返回一个对象,里面的每一个键值对就是一个映射

mapDispatchToProps?: Object | (dispatch, ownProps?) => Object

mapDispatchToProps是connect函数的第二个参数,用来建立 UI 组件的参数到store.dispatch方法的映射。它定义了哪些用户的操作应该当作 Action,传给 Store。它可以是一个函数,也可以是一个对象。


const mapStateToProps = state => {
    return{
        todos : getVisibleTodos(state.todos,state.visibilityFilter)
    }
}

const mapDispatchToProps = dispatch => {
    return {
        onTodoClick : id => {
            dispatch(toggleTodo(id))
        }
    }
}

const VisibleTodoList = connect(
    mapStateToProps,
    mapDispatchToProps
)(TodoList)

<Provider> 组件

<Provider />使得Redux store可用于该connect()函数中包装的任何嵌套组件。

由于可以连接React Redux应用程序中的任何React组件,因此大多数应用程序都将<Provider>在顶层渲染,其中包含整个应用程序的组件树。

let store = createStore(todoApp,applyMiddleware(thunkMiddleware))
const App = () => (
    <Provider store={store}>
        <AddTodo />
        <VisibleTodoList />
        <Footer />
    </Provider>

参考

https://www.jianshu.com/p/ad7eddb23d66
https://react-redux.js.org/introduction/quick-start#connect
https://segmentfault.com/a/1190000017064759?utm_source=tag-newest#articleHeader16

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值