useEffect 数组中的值更新后先执行哪个函数

这个我也不知道当时为什么脑抽答了先执行第一个函数…然后再执行返回后的那个函数。

这个肯定就是先执行返回后的函数,再执行第一个函数的。

用脑子想想,比如有个定时器…你更新了之后不得先清除吗…

  1. // xxx 更新了之后会先执行 funcB
  2. useEffect(() => { // 此处意为第一个函数 - funcA
  3. return () => {
  4. // 此处为第二个函数 - funcB
  5. }
  6. }, [xxx])

当数组中参数是对象的时候,属性值变了函数会执行吗

当时是答对了,但是追问的时候脑子糊了…没答好。

前面我说对象是引用类型,然后面试官问那为什么对象属性值变了,会触发执行第一个函数,他们不应该指向同一地址吗?

以如下代码进行讲解:

  1. const [o, setO] = useState({a: 1})
  2. useEffect(() => {
  3. console.log('o changed');
  4. }, [o])

其实当你 setO 的时候它内部是直接将 o 的值给替换掉,所以是个新的对象,而非指向同一地址。

我也不知道当时为什么我没答上来,大概是被面试官气场压制了,前面没答好,后面就容易崩。。。