zoukankan      html  css  js  c++  java
  • redux的使用过程

    1.redux是react的状态管理工具,可以用来存放公共数据,因此也可用来作为组件间参数传递的方法。
     
    2.组件传参,需要有一个公共的父组件。在父组件中引入Provider。通过Provider将store传递到子组件中,这样子组件就可以使用store中的数据。
            在render函数中,将返回的HTML面板用 <Provider store={ store } ></Provider>包裹起来,这样就可以实现传递
                main.js
     1 import child1 ....      //引入组件
     2 import child2 ....      //引入组件
     3  
     4 import {Provider} from 'react-redux'
     5 ....
     6 render(){
     7     return (
     8         <Provider store = {store}>    //添加Provider标签
     9             <div>
    10                 <child1>111</child1>
    11                 <child2>222</child2>
    12             </div>
    13         </Provider>
    14    )
    15 }
    16 ....
     
    3. 创建redux所需要的基本的四个文件:Actions.js   ActionTypes.js   Store.js   Reducer.js
     
     1 Actions.js            //定义Action函数,当有数据改变时,就产生了一个action,携带着新的payload和之前的type
     2  
     3 var actionFunc = function(action){
     4     return {
     5         type:action.type,
     6         payload:action.payload
     7     }
     8 }
     9 export default actionFunc
    10  
    11 ActionTypes.js        //定义action的类型,根据类型返回不同的state
    12  
    13 export const ACTTYPE1 = 'add1'
    14 export   const  ACTTYPE2 = 'add2'
    15  
    16 Store.js              //用来初始化state数据(默认空),并将reducer和state绑定到store上
    17  
    18 import {createstore} from 'redux'
    19 import reducer from './Reducer.js'
    20 var state = {        
    21     type:'',
    22     payload:''
    23 }
    24 var store = createstore(reducer,state)
    25 export default store
    26  
    27 Reducer.js            //通过action返回不同的数据,
    28  
    29 import * as actionTypes from './ActionTypes.js'
    30 export default {(state,action)=>{
    31     switch (action.type) {
    32         case actionTypes.ACTTYPE1 : 
    33             return {...state, payload : action.payload}    //将state展开,然后再添加一个payload属性,用来覆盖之前的payload属性
    34         case actionTypes.ACTTYPE2 :
    35             return {...state, payload : action.payload}
    36         default :
    37             {...state}
    38     }
    39 }}
      
    4.在需要改变 state 数据的组件上,引入 connect 并定义两个函数,并将定义的 Action 和 ActionTypes 引入
                1.定义 mapStateToProps 和 mapDispatchToProps 两个函数。前一个是用来将 state 映射到this.props上的(就是映射到该组件上),后一个是将dispatch映射到组件上的。
                2.引入 Action 和 ActionTypes 是为了调用Action函数,而Action函数创建了一个Action,调用Action函数的时候会传值,传的值就是action的值。   然后通过action修改state的数据
                3.使用connect链接两个函数和组件,并暴露
                        export default connect( mapStateToProps , mapDispatchToProps )(Zujian)
                4.mapStateToProps 
     1 const mapStateToProps  =  function(state , ownProps){
     2     return {
     3         text : state.text        //将state中定义的数据(text)返回到props上。这样在类中就能通过this.props.text访问到state中的数据
     4     }
     5 }
     6 const mapDispatchToProps = function(dispatch , ownProps){
     7     return {
     8         funcname : (text)=>{        //返回一个方法到props上,这样就可以通过this.props.funcname( 'tt' )调用这个方法,并调用dispatch
     9                 dispatch( Action.action1( { type : action1type  ,  payload : 'sunny' } ) )    //调用dispatch 创建一个action,并修改state
    10         }
    11     }
    12 }
     
    5.在需要显示store中的数据的组件上也要定义 mapStateToProps 和 mapDispatchToProps 两个函数,并用connect链接。mapDispatchToProps 中的返回内容可以为空对象。
  • 相关阅读:
    方法级别的抽象
    同事关系处理6个关键点
    面向对象(类与对象)
    初识面向对象
    Python模块学习
    解决ORA-21561: OID generation failed
    Python模块——PrettyTable 模块
    对于python setup.py install安装的包如何卸载
    git问题--Push rejected: Push to origin/master was rejected
    Scrapyd发布爬虫的工具
  • 原文地址:https://www.cnblogs.com/waterFowl/p/8024893.html
Copyright © 2011-2022 走看看