React-6.react-redux

redux里的問題:

1、組件中出現了大量的store對象
2、 在redux里,凡是使用state里數據的組件,必須加上 store.subscribe() 函數,否則,數據不是響應式的

react-redux的API

1.Provider

<Provider/>組件:可以讓組件拿到state(不需要使用傳統(tǒng)的subscribe()來監(jiān)聽state重繪組件)

import {Provider} from "react-redux";
import store from './redux/store'

ReactDOM.render((
    <Provider store={store}>
        <App/>
    </Provider>
), document.getElementById('root'));

2.connect():

鏈接 ,(返回值)是個高階組件,用來鏈接react組件和redux(組件狀態(tài)要從redux中獲取)
connect([mapStateToProps], [mapDispatchToProps], [mergeProps], [options])
功能:把store和react組件聯系在一起。只要store發(fā)生了變化就會調用mapStateToProps方法。Connect方法就是個高階組件。

參數1:mapStateToProps是個函數,

功能: ** 把倉庫里的state合并到props里。給mapStateToProps函數傳入所有state,它返回指定的state數據(需要合并到組件props中的state)。返回的state與組件的 props 合并*(聯系的體現)***。所以,當store發(fā)生變化時,mapStateToProps方法就會更新組件里的props,那么組件就更新了(因為props變了)。
參數:
state:所有的state
返回值:
經過處理后的state(組件里需要的state)。
示例代碼:

const mapStateToProps = (state) => {
                          return ({
                             name: state.addName //name屬性會和組件的props合并。
                          })
                    }

參數2:mapDispatchToProps函數

功能:
把dispatch和props聯系起來。傳入dispatch,返回綁定好的action方法。
更改數據必須要觸發(fā)action,所以,mapDispatchToProps把 action 作為組件的props 進行綁定(聯系的體現),要派發(fā)的函數名,可以是多個函數。mapDispatchToProps 就是用于建立組件跟store.dispatch的映射關系。
參數:
dispatch: 派發(fā)
ownProps:當前組件的props,即使用標簽時,傳入的props
返回值:
對象:表示所有dispatch的對象
示例代碼:

const mapDispatchToProps = dispatch  => ({
           addNameCreater: () => dispatch(actions.addNameCreater())
})

示例代碼:

export default connect( mapStateToProps,  mapDispatchToProps )(組件名)

react-redux的思路:

1)、用Provider包裹最頂層的組件,提供一個store屬性。這樣redux任何組件里都可以使用store了。
2)、使用connect()函數來鏈接react的組件和redux的store。記?。篶onnect不能單獨使用,必須要有Provider

最佳實現

//安裝:npm install --save react-redux

//1、主入口文件 index.js
import {Provider} from react-redux
import store from './plugins/redux'

<Provider store={store}>
  <App/>
</Provider>
  


 //2、容器組件里:App組件
import {connect} from "react-redux";
 
class App extends React.Component {
  add(){
    //直接用props來調用dispatch,而不需要store
    this.props.dispatch({
      type:"INCREMENT",
      payload:2
    });
  }
    
  render = () => (
     <div className="App">
        <p>{this.props.count}</p>  //  使用props可以直接拿到state里的數據,而不需要store
        <input type="button" value=" 加 " onClick={()=>this.add()} />
     </div>
   )    
}




 //容器組件對外開放時,(把redux里的state轉到props) 
export default connect((state)=>{
  return {
    count :state.count    
  }
})(App);

在react-redux里,把組件進行拆分(容器組件和UI組件)
容器組件:處理業(yè)務邏輯,有狀態(tài)(在redux里存放)組件
UI組件:只做展示,就是無狀態(tài)組件

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容