Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何为useState创建动态函数名?_Reactjs_React Hooks_Use State - Fatal编程技术网

Reactjs 如何为useState创建动态函数名?

Reactjs 如何为useState创建动态函数名?,reactjs,react-hooks,use-state,Reactjs,React Hooks,Use State,我试图从一个名称数组中添加useState钩子,但它似乎没有按照我认为的方式工作。 有人知道我如何才能做到这一点吗 let f = { get: { }, set: { } }; for (let field of fields) { const [f.get[field], f.set[field]] = useState(menu[field]); } 我在atm机上的错误是: imports/ui/admin/Menu.jsx:128:10: /home/csi

我试图从一个名称数组中添加
useState
钩子,但它似乎没有按照我认为的方式工作。 有人知道我如何才能做到这一点吗

let f = {
    get: { },
    set: { }
};

for (let field of fields) {
    const [f.get[field], f.set[field]] = useState(menu[field]);
}
我在atm机上的错误是:

imports/ui/admin/Menu.jsx:128:10: /home/csi/csi/imports/ui/admin/Menu.jsx: Unexpected token, expected "," (128:10)

  126 |     };
  127 |     for (let field of fields) {
> 128 |         const [f.get[field], f.set[field]] = useState(menu[field]);
      |                 ^
  129 |     }
  130 | 
  131 |     const submit = e => {

提前谢谢

首先,React hook不应在条件语句和循环中使用,因为它们依赖于统一的、确定性的调用顺序。签出以获取有关该主题的更多信息

此外,
useState(menu[field])
返回状态变量和setter函数。您的代码显然无法工作,因为它在语法上不正确。通过将整个状态存储在单个对象中,可以使用动态变量名:

const [state, setState] = useState({property: value});

const alterState = (property, value) => {
    setState(state => {...state, [property]: value});
}

或者使用
减速机

只有在确保每次渲染组件时以相同顺序调用挂钩时,才能在循环内使用useState。这就是允许React在多个useState和useEffect调用之间正确保留挂钩状态的原因


查看此ans以获得更好的说明

您不能用
const
声明对象的字段,您可以做的是
const[temp1,temp2]=useState(菜单[field]);f、 get[field]=temp1;f、 设置[字段]=temp2但是我建议您重新考虑您的方法,并在单个状态变量中存储一个值数组