Если у меня есть состояние массива React, созданное с помощью хука useState
, можно ли как-то узнать, какие элементы были обновлены? Мое намерение состоит в том, чтобы запускать некоторый код всякий раз, когда состояние обновляется внутри хука useEffect
, но я хотел бы иметь доступ к индексу(ам) обновленных элементов массива. Это возможно?
2 ответа
Да можно, но если индексы не меняются.
Вы можете удерживать свое предыдущее состояние и в своем useEffect перебирать новый массив и проверять, равен ли элемент с индексом i соответствующему элементу в предыдущем состоянии или нет:
const [myArray, setMyArray] = useState([]);
const [myPreviousArray, setMyPreviousArray] = useState([]);
// Assume we have a function that updates the state
const handleArrayDataChange = (newValue) => {
setMyPreviousArray([...myArray]);
setMyArray(newValue);
}
useEffect(() => {
myArray.forEach((item, index) => {
if(JSON.stringify(item) !== JSON.stringify(myPreviousArray[index])) {
// The item is updated
}
});
}, [myArray]);
Мое намерение состоит в том, чтобы запускать некоторый код всякий раз, когда состояние обновляется внутри хука useEffect,
Это можно сделать, передав состояние в массиве зависимостей useEffect.
const [nameArray, setNameArray] = useState([]);
useEffect(() => {
// things you want to do
},[nameArray]);
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Имейте в виду, что JavaScript — это НЕ то же самое, что Java! Включите все ярлыки, относящиеся к вашему вопросу; например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [svelte] и т. д.
useEffect
после обновления состояния. Извините, что не упомянул об этом.