如果我有一个用useState钩子创建的React数组状态,是否有可能以某种方式找出哪些元素被更新了?我的目的是在状态更新时运行一些代码,在useEffect钩子内,但我想访问更新的数组元素的索引。这可能吗?
useState
useEffect
vuv7lop31#
是的,您可以,但前提是索引未更改。你可以保持你的前一个状态,在你的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]);
k2fxgqgv2#
我的意图是在useEffect挂接内每当状态更新时运行一些代码,这可以通过向下传递useEffect的dependecy数组中的状态来完成。
const [nameArray, setNameArray] = useState([]); useEffect(() => { // things you want to do },[nameArray]);
2条答案
按热度按时间vuv7lop31#
是的,您可以,但前提是索引未更改。
你可以保持你的前一个状态,在你的useEffect中,遍历你的新数组,并检查索引i处的元素是否等于前一个状态中的对应元素:
k2fxgqgv2#
我的意图是在useEffect挂接内每当状态更新时运行一些代码,
这可以通过向下传递useEffect的dependecy数组中的状态来完成。