微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将值传递给React map函数中的函数

如何解决将值传递给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 举报,一经查实,本站将立刻删除。