zoukankan      html  css  js  c++  java
  • react-redux 的快速入门使用

    本文主要记录一些react-redux 的 怎么快速上手使用,具体一些概念如果不理解,大家就查阅官网api

    1. 安装react-redux 依赖

    npm install redux,react-redux,redux-thunk

    2. 写一个store 

    为了更好管理store了,都规范了独立建立几个文件放在store 文件夹下

    2.1、store/action-type.js : 声明action 的常量

    //1.  store/action-type.js 声明action 的常量
    export const APP_TOKEN = "APP_TOKEN"  

    2.2、store/action.js:定义action 操作,所有数据只能通过action 更新

    //2. store/action.js   只能通过触发action更新state 数据的操作
    import { APP_TOKEN} from "./action-type";
    // 更新appToken
    export const UpdateAppToken= (data)=>{
         return (dispatch)=>{
              dispatch({
                   type:APP_TOKEN,
                   data:data,
              })
         }
    }

    2.3、store/reducer.js初始化state数据和接受触发action的数据

    //3. store/reducer.js 这里是初始化数据和接受触发action的数据
    import {APP_TOKEN,} from "./action-type";
    import {combineReducers} from 'redux'
    
    const AppToken = (state="",action)=>{
        switch (action.type) {
            case APP_TOKEN:
                   //在这里可以做一下额外处理,如:本地缓存
                if(action.data){     
    sessionStorage.setItem(APP_TOKEN,action.data) }
    else{ sessionStorage.removeItem(APP_TOKEN); } return action.data||"" // break; default: return state } } //如果有多个,可以合拼在一起导出 export const reducers = combineReducers({AppToken})

    2.4、store/index.js: 整合处理创建createStore

    //4. store/index.js 整合处理创建createStore
    import {  createStore, applyMiddleware } from "redux"
    import  thunk from "redux-thunk"
    import { reducers } from "./reducer";
    export default  createStore(reducers,applyMiddleware(thunk))

     

    4.  使用

     4.1、  在根组件中注入我们写的store

    //src/index.js  项目入口文件
    import {Provider} from 'react-redux'
    import store from "./store"
    
    ReactDOM.render((
        <Provider store={store}>
             <App />
        </Provider>
    ), document.getElementById('root'));

    4.2、 在 类组件中使用

    import { connect } from "react-redux";
    import {UpdateAppToken} from "./store/action"
    
    //class 定义组件
     class App extends Component {
      render() {
        console.log(this.props)
        return (
          <div>
            <button onClick={()=>this.props.UpdateAppToken("ksdfksf")}>设置token</button>
            <button onClick={()=>this.props.UpdateAppToken("")}>清空token</button>
        
         <div>token值:{this.props.appToken}</div>
        </div>
            
        )
      }
    }
    
    //export default App;// 没使用store 的时候导出
    /*connect 有两个参数,
    第一个是mapStateToProps 函数,返回是一个对象, 其实就是  store/reducer.js 文件声明导出的那些state数据
    第二个参数mapDispatchToProps,对应就是store/action.js 的数据
    这两个参数的数据都将映射在组件的props 上面
    */ 
    const mapStateToProps = (state=>({
         appToken:state.AppToken,
    }))
    const mapDispatchToProps = {UpdateAppToken}
    export default connect(mapStateToProps ,mapDispatchToProps )(App)

    4.3、 在函数组件使用(现在有useReducer,这里不讲这个)

     用法和类组件一样,就是用connect 包装组件,示例:

    //使用函数组件,这里不使用第二参数了,只是接收显示state(其他组件改变,同步显示)
    const ShowAppToken  = connect(state=>({
      appToken:state.appToken
    }))((prop)=>{
      return <h1>appToken值:{prop.appToken}</h1>
    })

    至此,最简单的使用就完成了,redux 是一个很好用的数据共享处理的方案,react-reducer 更是简化对reducer 的操作,将ui层和逻辑层的分离,更多的概念和api 用法参考官网:https://www.redux.org.cn/docs/react-redux/

      

  • 相关阅读:
    vue bus 中央事件总线
    0时间复杂度
    stack 数据结构
    es6 class
    directives 自定义指令
    node中间件
    数据结构博客清单
    TCP/IP 协议栈博客清单
    Java 面向对象:接口
    Java 面向对象:Object 类
  • 原文地址:https://www.cnblogs.com/beyonds/p/13627396.html
Copyright © 2011-2022 走看看