javascript - 如何在 React 中为 useReducer 钩子编写更少、重复的代码?
问题描述
我正在创建一个 useReducer,例如,设置商品的价格。
const reducer = (state, action) => {
switch (action.type) {
case 'SET_PRICE':
return {
...state,
price: action.payload,
}
default:
return state
}
}
我现在必须拥有多个这样的 SET_PRICE,因为我有数百种产品,所以我开始写
case 'SET_PRICE_0':
return {
...state,
price_0: action.payload,
}
case 'SET_PRICE_1':
return {
...state,
price_1: action.payload,
}
...
如果我写超过 10 个这样的代码,我可以看到有问题,更不用说 100 个了……有没有其他方法可以编写更少的代码?
解决方案
我相信问题不在于您提到的减速器,而在于您使用它的方式。在渲染产品时,您应该useReducer
在安装每个产品组件时将钩子与第一个减速器(具有 SET_PRICE 的那个)一起使用。
这是一个虚拟实现:
const ProductComponent = () => {
const [price, setPrice] = useReducer(reducer, initialState);
return (
<div> ... </div>
);
};
然后您可以使用此组件映射到您的产品列表。
您还可以参考这篇关于不同useReducer
食谱的详细文章:https ://medium.com/crowdbotics/how-to-use-usereducer-in-react-hooks-for-performance-optimization-ecafca9e7bf5
推荐阅读
- android - Buildozer 构建失败:未指定 Android SDK 目录,正在退出
- sas - 如何总结不同年龄组的不同疾病组合?
- javascript - 测试组件路由器链路
- c# - 异步写入重定向的标准输出是同步的还是异步的?
- highcharts - 使用 boost 在大型热图中显示所有 y 标签 - Highcharts
- c# - 将 DataGrid 绑定到 ListView
- c++ - 在 Docker 中为 x86 主机上的 arm32v7 构建 libtorrent 失败并出现(错误:未知目标类型 EXE)
- django - Django - 在特定时间自动执行任务
- .net - 从 Web 浏览器使用客户端 Web 服务是一种好的做法吗?
- java - 内部连接器错误 (1002) - 调用线程在等待响应解除阻塞时超时