上篇文章寫到了redux實現(xiàn)組件數(shù)據(jù)共享的方法,但是在react中,redux作者提供了一個更優(yōu)雅簡便的模塊實現(xiàn)react組件之間數(shù)據(jù)共享。那就是利用react-redux
利用react-redux實現(xiàn)react組件數(shù)據(jù)之間數(shù)據(jù)共享
1.安裝react-redux
$ npm i --save react-redux
2.從react-redux導入Prodiver組件將store賦予Provider的store屬性,
將根組件用Provider包裹起來。
import {Provider,connect} from 'react-redux' ReactDOM.render( <Provider store={store}> <Wrap/> </Provider>,document.getElementById('example'))
這樣根組件中所有的子組件都可以獲得store中的值
3.connect二次封裝根組件
export default connect(mapStateToProps,mapDispatchToProps)(Wrap)
connect接收兩個函數(shù)作為參數(shù),一個mapStateToProps定義哪些store屬性會被映射到根組件上的屬性(把store傳入react組件),一個mapDispatchToProps定義哪些行為action可以作為根組件屬性(把數(shù)據(jù)從react組件傳入store)
3.定義這兩個映射函數(shù)
function mapStateToProps(state){ return { name:state.name, pass:state.pass } } function mapDispatchToProps(dispatch){ return {actions:bindActionCreators(actions,dispatch) } }
把store中的name,pass映射到根組件的name,pass屬性。
actions是一個包含了action構建函數(shù)的對象,用bindActionCreators把對象actions綁定到根組件actions屬性上。
4.在根組件引用子組件的位置用 <Show name={this.props.name} pass={this.props.pass}></Show>
將store數(shù)據(jù)傳入子組件.
5.在子組件中調用actions中的方法來更新store中的數(shù)據(jù)
<Input actions={this.props.actions} ></Input>
先將actions作為屬性傳入子組件
子組件調用actions中的方法創(chuàng)建action
//Input組件 export default class Input extends React.Component{ sure(){ this.props.actions.add({name:this.refs.name.value,pass:this.refs.pass.value}) } render(){ return ( <div> 姓名:<input ref="name" type="text"/> 密碼:<input ref="pass" type="text"/> <button onClick={this.sure.bind(this)}>登錄</button> </div> ) } }
因為我們采用了bindActionCreators函數(shù),創(chuàng)建action后會立即自動調用store.dispatch(action)將數(shù)據(jù)更新到store.
這樣我們就利用react-redux模塊完成了react各個組件之間數(shù)據(jù)共享。
跟上篇文章一樣,實現(xiàn)了在一個組件Input中通過actions更新數(shù)據(jù)到store,然后在另一個組件Show中展示store中的數(shù)據(jù)
聲明:本網(wǎng)頁內容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com