如何解决将值传递给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>
))}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。