在 React 中使用 onee 方法动态创建和更新相似状态

Nes*_*esh 0 javascript ecmascript-6 reactjs react-hooks

我正在尝试handleChange对复选框使用单一方法,然后相应地更新它们各自的状态。当我尝试创建动态函数时,调用它的中断。让我知道我在这里做错了什么,可以使用相同的方法更新复选框的检查状态。

失败的功能 -

const handleChange = (event) => {
    const target = event.target;
    const value = target.checked;
    const functionName = `set${target.name}`;
    // console.log(functionName) // functionName = setisItem1 or setisItem2
    functionName(value);
  };
Run Code Online (Sandbox Code Playgroud)

我的沙箱代码 - https://codesandbox.io/s/tender-hooks-guecv?file=/src/App.js[在此处输入链接描述] 1

Jul*_*lia 5

您的代码所做的相当于"setisItem1"(), 不起作用,因为字符串不是函数。

@yaya 的答案可能会奏效(这就是我最初尝试的方法),但eval可能不安全。

这就是为什么我会这样写:

const functionName = target.name === "isItem1" ? setisItem1 : setisItem2;
Run Code Online (Sandbox Code Playgroud)

  • 哦,是的...您可以创建字符串到函数的映射,例如 `const functionName = {"isItem1": setIsItem1}[target.name]`,但我认为最好将这些函数重构为一个。 (2认同)
  • @Nesh,如果您有很多复选框,最好将它们存储在一个状态中,我将其放入更新的答案中。 (2认同)