问题由来?抛出问题?
在页面中可能会遇到这样的诉求,第一个问题是可能要在项目中判断是首次渲染还是后续的渲染,然后要在useEffect里面检查这个标识状态。
我们或许可以把它封装成一个自定义hook:
子组件:
const useUpdateFirst = () => {
const ref = useRef(true);
useEffect(() => {
ref.current = false;
})
return [ref.current];
}
父组件:
const Example = () => {
const [count, setCount] = useState(0);
const [status] = useUpdateFirst();
console.log(count, status);
return (
{count}
<button onClick={() => {setCount(count + 1)}}>+
)
}
再来看一个问题,这才是我们可能会遇到的问题,我们去使用useState更新值是再正常不过的事情了,不过有的需求可能要求我们要记录更新之前的原值,这时候我们仍然可以使用useRef去考虑
我们继续自定义一个hook:
子组件:
const useReceivePrev = (value) => {
const ref = useRef();
useEffect(() => {
ref.current = value;
})
return [ref.current];
}
父组件:
function Example () {
const [count, setCount] = useState(0);
const [prev] = useReceivePrev(count);
console.log(count,prev)
return (
{count}
<button onClick={() => {setCount(count+1)}}>+
)
}