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/

  

 

posted @ 2020-09-07 16:12  天高任鸟飞吧  阅读(417)  评论(0编辑  收藏  举报