如果它们的状态在 React useEffect 中发生变化,如何区分上下文值
How to differentiate context values if their state changed in React useEffect
const someFunction = () = {
...
const { data, setData, activeIndex, setActiveIndex } = useContext(MusicContext);
useEffect(() => {
console.log(" useEffect called");
// another component called setData or setActiveIndex which resulted here
// how to compare data to its prevState if it changed
// how to compare activeIndex to its prevState if it changed
}, [activeIndex, data]);
...
}
以上是一些对两个不同的上下文变量具有 useEffect 的函数
data
是一个对象 proptype {} 并且 activeIndex
是一个数字
如果 data
发生变化,我如何比较它的 prevState?
如果 activeIndex
发生变化,我该如何比较它的 prevState?
我可以在单个 useEffect 块中完成并需要打开多个吗?
您可以useRef
存储最后看到的值。这通常被提取到“usePrevious”自定义挂钩中。
function usePrevious(value) {
const ref = useRef();
useEffect(() => {
ref.current = value;
});
return ref.current;
}
现在在您的组件中,您可以检查之前的值。
const SomeFunction = () = {
...
const { data, setData, activeIndex, setActiveIndex } = useContext(MusicContext);
const prevData = usePrevious( data );
const prevActiveIndex = usePrevious( activeIndex );
useEffect(() => {
if ( data !== prevData ) {
// do something
}
if ( activeIndex !== prevActiveIndex ) {
// do something
}
}, [activeIndex, data]);
...
}
const someFunction = () = {
...
const { data, setData, activeIndex, setActiveIndex } = useContext(MusicContext);
useEffect(() => {
console.log(" useEffect called");
// another component called setData or setActiveIndex which resulted here
// how to compare data to its prevState if it changed
// how to compare activeIndex to its prevState if it changed
}, [activeIndex, data]);
...
}
以上是一些对两个不同的上下文变量具有 useEffect 的函数
data
是一个对象 proptype {} 并且 activeIndex
是一个数字
如果 data
发生变化,我如何比较它的 prevState?
如果 activeIndex
发生变化,我该如何比较它的 prevState?
我可以在单个 useEffect 块中完成并需要打开多个吗?
您可以useRef
存储最后看到的值。这通常被提取到“usePrevious”自定义挂钩中。
function usePrevious(value) {
const ref = useRef();
useEffect(() => {
ref.current = value;
});
return ref.current;
}
现在在您的组件中,您可以检查之前的值。
const SomeFunction = () = {
...
const { data, setData, activeIndex, setActiveIndex } = useContext(MusicContext);
const prevData = usePrevious( data );
const prevActiveIndex = usePrevious( activeIndex );
useEffect(() => {
if ( data !== prevData ) {
// do something
}
if ( activeIndex !== prevActiveIndex ) {
// do something
}
}, [activeIndex, data]);
...
}