应该有人像我一样想过使用普通变量let flag = true
去做标识吧?
代码如下:
import React, { useEffect,useState} from 'react'
import { MyContext } from './Reducer.js'
export default () => {
let [num,setNum] = useState(0)
let flag = true
useEffect(()=>{
if(flag){
console.log("初次渲染")
flag = false
return
console.log("componentDidUpdate")
return (
<button onClick={()=>{ setNum(num+1) }}>按钮{num}</button>
这样是不行的,可以发现一旦调用了setNum()更新了状态,整个函数组件都会被重新调用,也就意味着普通变量flag会重新被初始化为true
,一直会走if的逻辑