一. 纯原生 redux 的使用
Redux 是常用的状态管理容器,能够帮助我们对一些全局变量进行有效管理。首先,举一个场景:我正在开开心心的逛淘宝商城,点进了一个淘宝店家的商品 A 的详情页,觉得不错,于是点击 ”加入购物车“,接着我又点进了一个天猫店家的商品 B 的详情页,也觉得不错,又点击了 ”加入购物车“,最终我打开购物车发现有 A B 两件商品。假设淘宝商品详情页和天猫商品是两个相互独立的组件,那么要实现上述场景,购物车就应当是一个共享组件,此时就可以使用 redux 对购物车实现统一管理。那么以当前这个场景,使用原生 redux 应该怎么实现呢?废话不多说,看如下实现:
-
安装 redux
redux 支持 npm 等包管理工具,故而进入项目目录中,执行
npm install redux --save / yarn add redux
-
建立一个仓库来存储数据
// store.js import {createStore} from 'redux' // 声明一个实际的操作函数,响应操作 const cartReducer = (state = { goods: [] }, action) => { switch (action.type) { case 'add': return {...state, goods: [...state.goods, action.good]} case 'delete': let deletedGoodIdx = action.good.index let newGoods = [...state.goods] newGoods.splice(deletedGoodIdx, 1) return {...state, goods: newGoods} default: return state } } // 创建 store 实例并导出 const store = createStore(cartReducer) export default store
-
在组件中使用 store
读取:
store.getState()
即可获取到 reducer 中的 state修改:
store.dispatch(action)
通过 dispatch 一个 action 来触发 reducer 中的修改行为/********** App.js **************/ import React from 'react' import {Link, Route} from 'react-router-dom' import store from './store' // 淘宝商品详情组件 function TbItem() { return (
>>这是淘宝详情页</h2>
>当前购物车内商品数量:{store.getState().goods.length}</p>