javascript - 将值传递给 React map 函数中的函数
问题描述
我有一个对象
const opt = [
{
name: "VAS",
lines: ["."]
},
{
name: "PACK",
lines: ["1", "2"]
},
{
name: "RET",
lines: ["A"]
}
];
我正在尝试创建一个按钮组,其中所有按钮都是基于opt.name
这样的动态生成的:
<ButtonGroup
color="primary"
aria-label="large outlined primary button group"
>
{opt.map((elem, index) => (
<Button onClick={changeState(elem.name)}>{elem.name} </Button>
))}
</ButtonGroup>
该函数本身设置反应状态:
const changeState = (x) => {
setValue(x);
};
由于某种原因,这会导致无限的重新渲染循环:
https://codesandbox.io/s/reverent-neumann-0t7qq?file=/src/App.js:292-391
期望的结果是 setValue 根据我单击的按钮 (opt.name) 更新状态。
谢谢
解决方案
您正在changeState
立即调用。例如:
<Button onClick={changeState(elem.name)}>{elem.name} </Button>
和
const clickHandler = changeState(elem.name);
// ...
return (
<Button onClick={clickHandler}>{elem.name} </Button>
);
改成:
{opt.map((elem, index) => (
<Button onClick={() => changeState(elem.name)}>{elem.name} </Button>
))}
推荐阅读
- c++ - Visual Studio Code - 调试 3 个文件
- reactjs - Prettier 不格式化 .tsx 文件
- javascript - 推迟节点中的异步调用,直到调用者完成所有等待
- nativescript - Nativescript Angular 编译错误“mergeDexDebug”
- json - JSON-HTTP 到 gRPC 转码
- html - 将一排图像保持在相同的高度
- google-maps - Google Maps API - 地点的客户数量
- javascript - 如何将变量从一页传输到另一页
- java - 将 Varchar 列类型映射到实体 jpa 中的整数
- hl7-fhir - FHIR:我是否需要为所有资源设置 StructureDefinition?