用react-redux實現react組件之間數據共享

上篇文章寫到了redux實現組件數據共享的方法,可是在react中,redux做者提供了一個更優雅簡便的模塊實現react組件之間數據共享。那就是利用react-reduxreact


利用react-redux實現react組件數據之間數據共享

1.安裝react-redux
$ npm i --save react-redux
2.從react-redux導入Prodiver組件將store賦予Provider的store屬性,
將根組件用Provider包裹起來。npm

import {Provider,connect} from 'react-redux'
ReactDOM.render(
<Provider store={store}>
  <Wrap/>
</Provider>,document.getElementById('example'))

這樣根組件中全部的子組件均可以得到store中的值
3.connect二次封裝根組件redux

export default connect(mapStateToProps,mapDispatchToProps)(Wrap)

connect接收兩個函數做爲參數,一個mapStateToProps定義哪些store屬性會被映射到根組件上的屬性(把store傳入react組件),一個mapDispatchToProps定義哪些行爲action能夠做爲根組件屬性(把數據從react組件傳入store)
3.定義這兩個映射函數ide

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構建函數的對象,用bindActionCreators把對象actions綁定到根組件actions屬性上。
4.在根組件引用子組件的位置用 <Show name={this.props.name} pass={this.props.pass}></Show>將store數據傳入子組件.函數

5.在子組件中調用actions中的方法來更新store中的數據this

<Input actions={this.props.actions} ></Input>
  • 先將actions做爲屬性傳入子組件spa

  • 子組件調用actions中的方法建立actioncode

//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函數,建立action後會當即自動調用store.dispatch(action)將數據更新到store.對象


這樣咱們就利用react-redux模塊完成了react各個組件之間數據共享。
跟上篇文章同樣,實現了在一個組件Input中經過actions更新數據到store,而後在另外一個組件Show中展現store中的數據get

相關文章
相關標籤/搜索