- 43
- 0
如题,存在多个action和多个reducer,使用combineReducers()合并多个reducer后,怎么知道store派发的action是由哪个reducer处理,根据什么进行判定的?
- 共 0 条
- 全部回答
-
VIP、首席╮ 普通会员 1楼
在React-Redux中,多个action和reducer通常会以组件树的形式关联起来,组件树的根节点是action,每个子节点是一个reducer。
以下是具体操作步骤:
- 定义action:首先,我们需要在store.js文件中定义我们的action。每个action都代表了一个操作,比如增加商品数量、删除商品、更改商品价格等。这些action会触发store的reducer。
```javascript import { createStore } from 'redux'; import reducer from './reducer'; import addProduct from './actions/productActions';
const store = createStore(reducer);
export default store; ```
- 定义reducer:在reducer.js文件中,我们需要定义我们的reducer。reducer负责处理store中的action,并根据不同的action执行不同的操作。
```javascript const productState = { products: [], totalPrice: 0 };
const productReducer = (state = productState, action) => { switch (action.type) { case 'ADDPRODUCT': return { ...state, products: [...state.products, action.payload], totalPrice: state.totalPrice + action.payload.price }; case 'DELET商品': return { ...state, products: state.products.filter(product => product.id !== action.payload.id) }; case 'CHANGEPRODUCTPRICE': return { ...state, products: state.products.map(product => product.price = action.payload.price) }; default: return state; } };
export default productReducer; ```
- 创建reducer的父组件:我们需要在我们的组件树中创建一个父组件,该父组件负责调用我们的reducer,并将reducer的结果作为组件的state。这样,每当组件的状态改变时,reducer都会被调用。
```javascript import React from 'react'; import { useSelector, useDispatch } from 'react-redux'; import productReducer from './reducer';
const ProductList = () => { const products = useSelector((state) => state.products); const dispatch = useDispatch();
const handleAddProduct = (product) => { dispatch(addProduct(product)); };
const handleDeleteProduct = (id) => { dispatch(deletProduct(id)); };
const handleChangeProductPrice = (price) => { dispatch(changeProductPrice(price)); };
return (
); };产品列表
{products.map((product) => ())}{product.name}
价格:${product.price}
export default ProductList; ```
通过以上步骤,我们就可以在React-Redux中实现多个action和reducer的关联。
-
无极清风 普通会员 2楼
在React-Redux中,多个action和reducer通常会以组件树的形式关联起来,组件树的根节点是action,每个子节点是一个reducer。
以下是具体操作步骤:
- 定义action:首先,我们需要在store.js文件中定义我们的action。每个action都代表了一个操作,比如增加商品数量、删除商品、更改商品价格等。这些action会触发store的reducer。
```javascript import { createStore } from 'redux'; import reducer from './reducer'; import addProduct from './actions/productActions';
const store = createStore(reducer);
export default store; ```
- 定义reducer:在reducer.js文件中,我们需要定义我们的reducer。reducer负责处理store中的action,并根据不同的action执行不同的操作。
```javascript const productState = { products: [], totalPrice: 0 };
const productReducer = (state = productState, action) => { switch (action.type) { case 'ADDPRODUCT': return { ...state, products: [...state.products, action.payload], totalPrice: state.totalPrice + action.payload.price }; case 'DELET商品': return { ...state, products: state.products.filter(product => product.id !== action.payload.id) }; case 'CHANGEPRODUCTPRICE': return { ...state, products: state.products.map(product => product.price = action.payload.price) }; default: return state; } };
export default productReducer; ```
- 创建reducer的父组件:我们需要在我们的组件树中创建一个父组件,该父组件负责调用我们的reducer,并将reducer的结果作为组件的state。这样,每当组件的状态改变时,reducer都会被调用。
```javascript import React from 'react'; import { useSelector, useDispatch } from 'react-redux'; import productReducer from './reducer';
const ProductList = () => { const products = useSelector((state) => state.products); const dispatch = useDispatch();
const handleAddProduct = (product) => { dispatch(addProduct(product)); };
const handleDeleteProduct = (id) => { dispatch(deletProduct(id)); };
const handleChangeProductPrice = (price) => { dispatch(changeProductPrice(price)); };
return (
); };产品列表
{products.map((product) => ())}{product.name}
价格:${product.price}
export default ProductList; ```
通过以上步骤,我们就可以在React-Redux中实现多个action和reducer的关联。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

