之前写了
 react18 通过redux 做一个简单的状态管理基站
 但代码确实相对比较乱
 这次进行一些小封装和分解 优化一下管理质量
 首先 我们创建一个 react项目
 然后在项目中引入
npm install redux --save
在src目录下创建 reducers 文件夹 下面创建 counter.js
counter.js 参考代码如下
let stateMap = {
   name: "小猫猫",
   money: 2800
}
const counter = ( state = stateMap,action )  => {
    switch(action.type) {
        case"PriceRise":
            state.money = (state.money + action.value);
            return state
        case"DevaLuation":
            state.money = (state.money - action.value);
            return state
        default:
        return state;
    }
}
export default counter
这里 我们做了一些修改 我们定义了一个默认的stateMap对象 作为redux的state 然后主要操作的是他的money金额字段 action 会从外面传入 其中 有两个字段 一个是 type 告诉counter 要进行什么操作
action.value 用于控制state下money(金额) 的值
PriceRise 则 我们加上去
 DevaLuation 则减掉
然后在 src下创建action文件夹
 action下创建index.js 参考代码如下
export function PriceRise(value) {
    return {
        type: "PriceRise",
        value: value
    }
}
export function DevaLuation(value) {
    return {
        type: "DevaLuation",
        value: value
    }
}
这里的方法 就负责产生 调用counter的数据
他们都有自己的type 然后value是外面传入的
src下创建目录 store 下面再创建一个index.js
参考代码如下
import { createStore } from "redux"
import reducer from "../reducers/counter"
// 创建store仓库
const store = createStore(reducer);
export default store
这里 负责用counter调用redux中的createStore生成对象 然后导出
然后在src下创建目录components 在下面建一个组件 taximeter.jsx 参考代码如下
import React from "react";
import store from "../store/index";
import {PriceRise,DevaLuation} from "../action/index";
class App extends React.Component{
  constructor(props){
    super(props);
    this.state = {
      store: store.getState()
    }
  }
  
  onPriceRise = () =>{
    store.dispatch(PriceRise(10));
    this.setState({})
  }
  onDevaLuation = () =>{
    store.dispatch(DevaLuation(10));
    this.setState({})
  }
  render(){
    return (
      <div className="App">
        <button onClick={ this.onPriceRise }>涨价十个点</button>
        <button onClick={ this.onDevaLuation }>降价十个点</button>
        <div>{ store.getState().money }</div>
      </div>
    )
  }
}
export default App;
这里 我们定义了所有的逻辑代码 然后 我们将他在 App.js 根组件中使用
import './App.css';
import Taximeter from './components/taximeter';
function App() {
  return (
    <div className="App">
        <Taximeter/>
    </div>
  );
}
export default App;
启动项目 界面效果就会是这样
 
 首先 我们在div中调用 store.getState() 获取到了state对象 展示了里面的money字段
然后我们点击 涨价十个点
通过调用PriceRise 每次加10 数据
 
 一直点就会一直加
 
然后减也是一样的 这里需要注意 我们每次用了加减操作都会空调一次setState 这个意思是希望界面重新渲染一次 因为 react对redux 不像
 vue对vuex 这个数据不是响应式的 需要你自己调用setState强行让界面重新渲染一下


















