#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. Спасибо, у меня уже было что-то подобное раньше, но мне показалось, что это неправильно.