Redux-Provider与connect

10 篇文章 2 订阅
2 篇文章 0 订阅
本文详细介绍了Redux与React的结合使用,包括Redux的基本思路,如actions.js和reducers.js的定义,createStore以及在React应用中的应用。重点讨论了Provider如何将store传给子组件,以及connect函数如何连接Redux和React组件。此外,文章还提出了关于store监听、页面渲染以及何时使用this.setState的问题,并给出了解答,揭示了Provider内部的工作原理和connect组件如何监听store变化并触发组件更新。
摘要由CSDN通过智能技术生成

Redux使用的基本思路

1)定义actions.js,其中包括actions type(字符串常量)、actions creators(返回一个json的函数,返回的这个json就是actions)2)定义reducers.js,包含多个reducer(就是一个函数):(state, action)=>{……return newState};最后通过
combineReducers()将多个reducer整合到一起 3)createStore(Reducers) 4)在入口文件中render( , rootElement); 5)React最外层组件中,在事件的回调函数中dispatch(actions creators(data));通过export default connect(select)(App) 绑定Redux与React

Redux执行的基本思路

1)用户进行点击(click)、输入(input)等事件,子组件通过callback调用最外层组件的自定义事件 2)最外层组件自定义事件的callback被触发,callback中执行dispatch(actions creators(data)) 3)store监听到action被触发,执行相应的reducer,
state被改变 4)页面render

这个过程的一些问题

1)入口文件中,store被传入Provider,但是子组件中并没有直接使用store,但是却具有dispatch方法(dispatch是store对象上的一个方法),Provider做了什么? 2)最外层组件中,export default connect(select)(App)是怎样联系Redux和React的?
3)dispatch(actions creators(data))是事件的发布者,但是store是什么时候被监听的? 4)reducer中并没有调用React的this.setState方法,页面到底是如何被render的? 5)既然Redux可以render页面,我们还要不要手动在callback中写this.setState?

解答

Provider干的事:接收store,并将store传到子组件中,当store发生变化时,更新store;所以子组件具有store的dispatch方法。问题1)解决。
connect干的事:定义了一个新的组件Connect,经过一系列的merge后,将各种值挂载props上传递到原组件。 Connect组件会保存state状态,同时监听Redux Store的变化,从而触发原组件的更新。在componentDidMount中监听Provider提供的store的变化。通过Context来访问store。响应函数为handleChange,handleChange里接收到通知后,将Connect组件的state改变为新的state,这里会有调用this.setState的操作。问题2)3)4)初步解决。
最后一个问题,官方说法是,既然用了Redux就应该用Redux控制所有状态,不手动render页面;也有人说不应该拘泥于API,在合适的时候可以调用this.setState方法,也确实有些例子是这么做的(https://github.com/emmenko/redux-react-router-async-example/blob/master/lib/components/pages/Login.js);StackOverflow的一个回答(http://stackoverflow.com/questions/34711477/should-you-ever-use-this-setstate-when-using-redux)这么说:需要保存在全局sore中的state需要使用Redux,但是一些展示性的state(比如一个用来表示下拉框是否显示的Boolean值)可以使用this.setState来render页面。问题5)有待继续探索。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值