next.js 如何在react中使用useState钩子中的变量?

yeotifhr  于 2023-06-22  发布在  React
关注(0)|答案(3)|浏览(223)

我想声明与userInputs数组的长度相同的useState钩子数。我想把它们命名为userInput0,userInput1,userInput2,,,userInputN但是“const [userInput+index.toString(),setUserInput] = useState('')”会抛出错误。我该怎么解决?

'use client';
import { useState } from 'react';
userInputs = ['hoge', '123', 'aaa'];
    userInputs.array.forEach((element, index) => {
    const [userInput+index.toString(), setUserInput] = useState('')
  });
iq3niunx

iq3niunx1#

我认为尽管这是你可能会做的事情,但我不建议你这样做,因为它可能会导致意想不到的行为
有一些规则,以便使用钩和你是打破其中一个

不要在循环、条件或嵌套函数中调用Hooks

https://legacy.reactjs.org/docs/hooks-rules.html
我建议您创建具有自己的状态的组件,并使用数组渲染3个不同的组件与它们的状态

ahy6op9u

ahy6op9u2#

要动态声明多个useState hook,名称如“userInput0”,“userInput1”,“userInput2”等,你不能直接将变量名串联成字符串。但是,您可以使用对象或数组来存储状态值来实现这一点。下面是一个示例,说明你可以如何完成它:

const userInputs = ['hoge', '123', 'aaa'];
  const [inputs, setInputs] = useState({});

  userInputs.forEach((element, index) => {
    const stateName = 'userInput' + index;
    if (!inputs.hasOwnProperty(stateName)) {
      setInputs((prevInputs) => ({ ...prevInputs, [stateName]: '' }));
    }
  });
0ve6wy6x

0ve6wy6x3#

如果你想动态地创建变量,比如var0var1var2,那么只需要使用一个数组。

const userInputs = [];
const setUserInputs = [];
userInputs.forEach((element, index) => {
  const [xuserInput, setUserInput] = useState('');
  userInputs.push(xuserInput);
  setUserInputs.push(setUserInput);
});

相关问题