用react-redux實(shí)現(xiàn)react組件之間數(shù)據(jù)共享的方法
上篇文章寫到了redux實(shí)現(xiàn)組件數(shù)據(jù)共享的方法,但是在react中,redux作者提供了一個(gè)更優(yōu)雅簡(jiǎn)便的模塊實(shí)現(xiàn)react組件之間數(shù)據(jù)共享。那就是利用react-redux
利用react-redux實(shí)現(xiàn)react組件數(shù)據(jù)之間數(shù)據(jù)共享
1.安裝react-redux
$ npm i --save react-redux
2.從react-redux導(dǎo)入Prodiver組件將store賦予Provider的store屬性,
將根組件用Provider包裹起來(lái)。
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接收兩個(gè)函數(shù)作為參數(shù),一個(gè)mapStateToProps定義哪些store屬性會(huì)被映射到根組件上的屬性(把store傳入react組件),一個(gè)mapDispatchToProps定義哪些行為action可以作為根組件屬性(把數(shù)據(jù)從react組件傳入store)
3.定義這兩個(gè)映射函數(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是一個(gè)包含了action構(gòu)建函數(shù)的對(duì)象,用bindActionCreators把對(duì)象actions綁定到根組件actions屬性上。
4.在根組件引用子組件的位置用 <Show name={this.props.name} pass={this.props.pass}></Show>
將store數(shù)據(jù)傳入子組件.
5.在子組件中調(diào)用actions中的方法來(lái)更新store中的數(shù)據(jù)
<Input actions={this.props.actions} ></Input>
先將actions作為屬性傳入子組件
子組件調(diào)用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> ) } }
因?yàn)槲覀儾捎昧薭indActionCreators函數(shù),創(chuàng)建action后會(huì)立即自動(dòng)調(diào)用store.dispatch(action)將數(shù)據(jù)更新到store.
這樣我們就利用react-redux模塊完成了react各個(gè)組件之間數(shù)據(jù)共享。
跟上篇文章一樣,實(shí)現(xiàn)了在一個(gè)組件Input中通過(guò)actions更新數(shù)據(jù)到store,然后在另一個(gè)組件Show中展示store中的數(shù)據(jù)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于React Context實(shí)現(xiàn)一個(gè)簡(jiǎn)單的狀態(tài)管理的示例代碼
本文主要介紹了基于React Context實(shí)現(xiàn)一個(gè)簡(jiǎn)單的狀態(tài)管理的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07react實(shí)現(xiàn)點(diǎn)擊選中的li高亮的示例代碼
本篇文章主要介紹了react實(shí)現(xiàn)選中的li高亮的示例代碼,頁(yè)面上有很多個(gè)li,要實(shí)現(xiàn)點(diǎn)擊到哪個(gè)就哪個(gè)高亮。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05淺談React多個(gè)setState會(huì)調(diào)用幾次
在React的生命周期鉤子和合成事件中,多次執(zhí)行setState,會(huì)被調(diào)用幾次,本文就詳細(xì)的介紹一下,感興趣的可以了解一下2021-11-11react函數(shù)組件useState異步,數(shù)據(jù)不能及時(shí)獲取到的問(wèn)題
這篇文章主要介紹了react函數(shù)組件useState異步,數(shù)據(jù)不能及時(shí)獲取到的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08react腳手架構(gòu)建運(yùn)行時(shí)報(bào)錯(cuò)問(wèn)題及解決
這篇文章主要介紹了react腳手架構(gòu)建運(yùn)行時(shí)報(bào)錯(cuò)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03JavaScript中rem布局在react中的應(yīng)用
這篇文章主要介紹了JavaScript中rem布局在react中的應(yīng)用 的相關(guān)資料,需要的朋友可以參考下2015-12-12ReactNative之鍵盤Keyboard的彈出與消失示例
本篇文章主要介紹了ReactNative之鍵盤Keyboard的彈出與消失示例,具有一定的參考價(jià)值,有興趣的可以了解一下2017-07-07react嵌套路由實(shí)現(xiàn)TabBar的實(shí)現(xiàn)
本文主要介紹了react嵌套路由實(shí)現(xiàn)TabBar的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08基于React實(shí)現(xiàn)倒計(jì)時(shí)功能
這篇文章主要為大家詳細(xì)介紹了如何基于React實(shí)現(xiàn)倒計(jì)時(shí)功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下2024-02-02react使用axios進(jìn)行api網(wǎng)絡(luò)請(qǐng)求的封裝方法詳解
這篇文章主要為大家詳細(xì)介紹了react使用axios進(jìn)行api網(wǎng)絡(luò)請(qǐng)求的封裝方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-03