我正在使用反应挂钩useState更新对象。我有一个可重用的组件,它只是一个输入,我将道具传递给它,还有一个onChange处理程序,用于更新状态。

如何使用prop值“ fooType”动态更新状态?这与fooType中的fooType不同:e.target.value`不被识别为变量。有没有办法重构它以这种方式工作?

输入组件:

const Input = (props) => {
  const { foo, foos, setFoos, fooType } = props;

  return (
    <input type='text'
      placeholder={ foo }
      value={ foo }
      onChange={ (e) => setFoos({ ...foos, fooType: e.target.value }) } />
  );
};


这是我将道具传递给三个输入的文件

const InputGroup = (props) => {
  // initial state
  const [foos, setFoos] = useState({
    foo1: 0, foo2: 0, foo3: 0
  });

  return (
    <div>
      <Input foo={ foos.foo1 }
        fooType='foo1'
        foos={ foos }
        setFoos={ setFoos } />

      <Input foo={ foos.foo2 }
        fooType='foo2'
        foos={ foos }
        setFoos={ setFoos } />

      <Input foo={ foos.foo3 }
        fooType='foo3'
        foos={ foos }
        setFoos={ setFoos }/>
    </div>
  );
}

最佳答案

您将要在[]中包围fooType,以将变量设置为键值。

onChange={ (e) => setFoos({ ...foos, [fooType] : e.target.value }) } />


就您现在编写方式而言,fooType被解释为新的键值。但是上述更改应该可以解决它。

10-05 18:37