1 首先注意到就是 useState
里面方法是异步的,所以不要在后面连续调用,由于react方法是批量异步调用,并不是每次调用修改方法都执行,所以需要用到callback写法 const [count, setCount] = useState(0); const add = () => { setCount(count + 1); setCount(count + 1); setCount(count + 1); setCount(count + 1);
// 就算执行多次 其实还是会只执行一次
//class组件是用一样的 }; 修改后 const add = () => { setCount(count => count + 1);
//这种回调函数的写法 setCount(count => count + 1); setCount(count => count + 1); setCount(count => count + 1);
// class组件 this.setState(prev=>({count: prev.count})) };
2 由于useState的是异步的,不要在修改后直接使用数据。
可以先修改数据,判断数据,也可以利用useEffec,useMemo等等通过监听数据执行 const [count, setCount] = useState(0); const add = () => { setCount(count + 1); if(count>=10) { // 一个逻辑这样的写的话会执行上一次吃结果} }; 正确使用
1 const add = () => { let n = count +1 if(n){ //逻辑 } setCount(n) }; 正确
2 : const add = () => [ setCount(count+1) ] useEffect(()=>{ // 这里是逻辑 },[count])
3 useEffect hook的使用
useEffect 这个hook的使用,每一个消耗性能的内容都可以通过return 来消除 useEffect(()=>{ // 逻辑1 return ()=>{ // 清楚逻辑1的副作用 } },[监听的值])
4 如果子组件是函数组件需要利用useImperativeHandle ,forWard
useRef 可以获取组件的数据,也可当常量的值来使用,注意获取数据使用的时候函数组件特别需要注意,如果子组件是函数组件需要利用useImperativeHandle ,forWard