美文网首页Object.create()和new Object()的区别
useEffect第二个参数不能是引用类型

useEffect第二个参数不能是引用类型

作者: 春木橙云 | 来源:发表于2020-10-14 20:48 被阅读0次
美女镇楼

react Hocks中的useEffect勾子极大简化了代码,但是又有些副作用,这些副作用用好了提高效率,用不好加班秃头!

import React, { useState, useEffect } from 'react';

function Example() {
  const [count, setCount] = useState({});

  useEffect(() => {
   setCount({test:"count是一个对象,使得页面死循环"})
  },[count]);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}

结果:页面死循环

解释:

useEffect接受两个参数:

  • 第一个参数是函数(这里叫effect函数),它的作用是,在页面渲染后执行这个函数。因此你可以把ajax请求等放在这里执行;
  • 第二个参数是一个数组,这里注意:
参数情况 效果 注意
不传 每次渲染后都执行清理或者执行effect 这可能会导致性能问题,比如两次渲染的数据完全一样
传空数组 只运行一次的 effect(仅在组件挂载和卸载时执行) 这就告诉 React 你的 effect 不依赖于 props 或 state 中的任何值,所以它永远都不需要重复执行
传[count] React 将对前一次渲染的count和后一次渲染的count进行比较。若相等React 会跳过这个 effect, 实现了性能的优化

上面例子中之所以造成页面的死循环,是因为在JavaScript中,{} === {}结果是false,{a:1} === {a:1}同样,由此造成了react以为两个值不同,就一直的渲染最终页面死循环。

结论:第二个参数一般情况下不要使用引用类型!

THE END!

相关文章

  • useEffect第二个参数不能是引用类型

    react Hocks中的useEffect勾子极大简化了代码,但是又有些副作用,这些副作用用好了提高效率,用不好...

  • 浅谈 useEffect

    一、说说 useEffect,什么是副作用?第二个参数为 [ ] 是什么意思? 1.什么是 useEffect ?...

  • useEffect

    useEffect的用法代替componentDidMount的方式,将useEffect的第二个参数传入空数组或...

  • 2018-05-08 Integer引用传值

    Integer是int的封装类型,是引用类型。那为什么不能作为引用类型作为参数传递呢 控制台打印结果 a=1通过打...

  • 详解react useEffect 和 useLayoutEff

    useEffect 引用官方 使用 useEffect 完成副作用操作。赋值给 useEffect 的函数会在组件...

  • java参数的传递

    基本类型作为参数是值传递 引用类型作为参数是引用传递(地址传递) 方法签名 方法签名有两部分组成:方法名和参数类型...

  • hooks 总结

    关于 hooks 使用过程中的疑问: 为什么 useEffect 第二个参数是空数组,就相当于 Component...

  • 函数类型与闭包

    函数类型 函数类型定义:(参数类型1,参数类型2,……)->返回值类型 函数类型是一种引用类型,类似于函数指针。可...

  • java 参数传递

    java中方法参数传递方式是按值传递。 如果参数是基本类型,传递的是基本类型的字面量值的拷贝。 如果参数是引用类型...

  • react hooks 之 useEffect

    useEffect useEffect 可以弥补函数组件没有生命周期的缺点。我们可以在useEffect第一个参数...

网友评论

    本文标题:useEffect第二个参数不能是引用类型

    本文链接:https://www.haomeiwen.com/subject/setgpktx.html