Redux 安装及使用

简介: Store 收到 Action 以后,必须给出一个新的 State,这样 View 才会发生变化。这种 State 的计算过程就叫做 Reducer。

一、安装


yarn add redux
或者
npm install --save-dev redux


二、创建相应目录


在src文件夹下创建store文件夹,在src文件夹下创建相应文件


61ac7476ebf544f6a5a2b5c90ec66d1c_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


1.创建store的入口文件idex.js


Store对象包含所有数据。如果想得到某个时点的数据,就要对 Store 生成快照。这种时点的数据集合,就叫做 State。

当前时刻的 State,可以通过store.getState()拿到。


import { createStore } from 'redux';
import reducer from './reducers/index'
const store = createStore(
  reducer,
  window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__() --开发者redux -devTools配置
);
export default store;


Redux 规定, 一个 State 对应一个 View。只要 State 相同,View 就相同。你知道 State,就知道 View 是什么样,反之亦然


要看到状态值的变化,--要到谷歌插件市场下载redux --devloos插件


2.Action


State 的变化,会导致 View 的变化。但是,用户接触不到 State,只能接触到 View。所以,State 的变化必须是 View 导致的。Action 就是 View 发出的通知,表示 State 应该要发生变化了。


Action 是一个对象。其中的type属性是必须的,表示 Action 的名称。其他属性可以自由设置


创建一个actionTypes.js的属性文件的js供使用


例如:


export const CHANGINPUT = 'CHANGINPUT'
export const ADDBBIMN = 'Add_bbimn'
export const DELEMTITEM = 'DelemtItem'
export const UPDATEINFO = 'UPdateinfo'


3.Action Creator


View 要发送多少种消息,就会有多少种 Action。如果都手写,会很麻烦。可以引入刚才创建的 Action, 在 /src/store/action/ 目录下创建actionCreators.js


import { CHANGINPUT, ADDBBIMN, DELEMTITEM, UPDATEINFO } from "./actionTypes";
export const changInput = (value) => ({
    type: CHANGINPUT,
    value: value
})
export const addbindCheng = () => ({
    type: ADDBBIMN,
})
export const deleteItemCheng = (index) => ({
    type: DELEMTITEM,
    value:index
})
export const updateinfo = (value) => ({
  type: UPDATEINFO,
  value: value,
});


4.Reducer更新数据状态


Store 收到 Action 以后,必须给出一个新的 State,这样 View 才会发生变化。这种 State 的计算过程就叫做 Reducer。


Reducer 是一个函数,它接受 Action 和当前 State 作为参数,返回一个新的 State。


/src/store/reducers创建index.js文件


import { CHANGINPUT, ADDBBIMN, DELEMTITEM ,UPDATEINFO } from "../actions/actionTypes";--引入action属性文件
const defaultState = {
  userInfo: {
    username: "李四",
    age: 28,
    sex: "男",
  },
};
export default (state = defaultState, action) => {
  if (action.type === CHANGINPUT) {
    // Reducer 里只能接受 state 不能改变state
    let newStade = JSON.parse(JSON.stringify(state));
    newStade.inputValue = action.value;
    return newStade;
  }
  if (action.type === ADDBBIMN) {
    let newStade = JSON.parse(JSON.stringify(state));
    newStade.list.push(newStade.inputValue);
    return newStade;
  }
  if (action.type === DELEMTITEM) {
    let newStade = JSON.parse(JSON.stringify(state));
    newStade.list.splice(action.value, 1);
    return newStade;
  }
  if (action.type === UPDATEINFO){
      let newStade = JSON.parse(JSON.stringify(state));
      newStade.userInfo.username = action.value;
      return newStade;
  }
  return state;
};


5.如何使用


在页面中引入相应的文件


import store from "../../../store";
import { updateinfo } from "../../../store/actions/actionCreators";  --我这里只用到了更新用户信息的


如我在用户列表里更新用户信息


a46a38eba903482e8fd779fea929d4c2_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

相关文章
|
3月前
|
存储 JavaScript 前端开发
什么是 Redux?
【8月更文挑战第30天】
49 0
|
3月前
|
存储 JavaScript 前端开发
列出 Redux 的组件
【8月更文挑战第30天】
28 0
|
6月前
|
存储 JavaScript 前端开发
了解 redux 么,说一下 redux 吧
了解 redux 么,说一下 redux 吧
64 0
|
存储 JavaScript 前端开发
什么是Redux?
什么是Redux?
|
JavaScript 前端开发 中间件
说说你对Redux的理解?和react-redux有什么区别?
说说你对Redux的理解?和react-redux有什么区别?
|
JavaScript
Redux中 combineReducers的使用
Redux中 combineReducers的使用
|
JavaScript 前端开发
什么是redux?如何在react 项目中使用redux?
什么是redux?如何在react 项目中使用redux?
105 0
|
存储 JavaScript 前端开发
【React】redux数据持久化存储(react-redux、redux-RTK)
【React】redux数据持久化存储(react-redux、redux-RTK)
353 0
|
存储 JavaScript 前端开发
MobX or Redux ? #81
MobX or Redux ? #81
88 0
|
JavaScript 前端开发 中间件
redux&react-redux(一)
redux&react-redux(一)
redux&react-redux(一)