Динамическое имя крючка реакции на основе цикла

#javascript #reactjs

Вопрос:

Я использую крючки react, и мне нужно динамически изменять крючок в зависимости от значения i цикла. Я чувствую, что есть простой способ сделать это, но не могу найти где. Любая помощь будет признательна, спасибо.

 const [hanzi0, setHanzi0] = useState(0);
const [hanzi1, setHanzi1] = useState(0);
const [hanzi2, setHanzi2] = useState(0);
const [hanzi3, setHanzi3] = useState(0);

for(var i = 0; i < 4; i  ) {
        setHanzi0(tmpData[x].hanzi);                    
    }
 

Комментарии:

1. Используйте эту библиотеку, которую я создаю npmjs.com/package/@alentoma/usestate

Ответ №1:

Вы не можете динамически искать имя локальной переменной. Это просто не та функция, которой обладает javascript.

Но что вы можете сделать, так это найти значение в некоторой структуре данных. Как, скажем, массив.

 const [hanzis, setHanzis] = useState([0,0,0,0])
 

Теперь вы можете обновить это состояние следующим образом:

 const newHanzis = [...hanzis] // create a shallow copy of the array
for(var i = 0; i < 4; i  ) {
    newHanzis[i] = tmpData[i].hanzi
}
setHanzis(newHanzis)
 

Если вам нужно динамически получать доступ к разным состояниям, то на самом деле у вас нет разных состояний, у вас есть одно состояние, которое имеет достаточную сложность для хранения множества фрагментов данных.

Ответ №2:

 for(var i = 0; i < 4; i  ) {
  if(i === 0) setHanzi0(tmpData[x].hanzi0);
  if(i === 1) setHanzi1(tmpData[x].hanzi1);
  if(i === 2) setHanzi2(tmpData[x].hanzi2);
  if(i === 3) setHanzi3(tmpData[x].hanzi3);                    
}
 

Комментарии:

1. Хотя технически это сработало бы, цикл, в котором вы выполняете другую строку кода для каждой итерации цикла, на самом деле не является циклом. Это просто очень запутанный способ выполнения четырех строк кода…

2. Спасибо, у меня уже было что-то подобное раньше, но мне показалось, что это неправильно.