• useEffect的两个参数


    情况一:

    useEffect需要传递两个参数,第一个参数是逻辑处理函数,第二个参数是一个数组

    1. useEffect(() => {
    2. /** 执行逻辑 */
    3. },[])

    情况二:

    • 第二个参数存放变量,当数组存放变量发生改变时,第一个参数,逻辑处理函数将会被执行
    • 第二个参数可以不传,不会报错,但浏览器会无限循环执行逻辑处理函数。
      代码如下:
      1. useEffect(() => {
      2. /** 执行逻辑 */
      3. })

    情况三:

    • 第二个参数如果只传一个空数组,逻辑处理函数里面的逻辑只会在组件挂载时执行一次 ,等价于 componentDidMount
      代码如下:
      1. useEffect(() => {
      2. /** 执行逻辑 */
      3. },[])

    情况四:

    • 第二个参数如果不为空数组,依赖指定参数触发使用
    • 逻辑处理函数会在组件挂载时执行一次和(a或者b变量在栈中的值发生改变时执行一次) 这是不是相当于componentDidMount 和componentDidUpdate 的结合
    1. const [a, setA] = useState(1);
    2. const [b, setB] = useState(2);
    3. useEffect(() => {
    4. /** 执行逻辑 */
    5. },[a,b])

    特殊情况处理

    useEffect监测不到依赖数组元素的变化。

    只有一种可能,依赖数组元素的地址的值根本就没变,
    原因:因为changeA没有真正的改变a在栈中的值(地址的值),只是改变了a在堆中的值。
    useEffect监测不到堆中值得变化,所有引用类型数据都应该注意这一点。

    1. const [a, setA] = useState({
    2. b: 'dx',
    3. c: '18',
    4. })
    5. const changeA = () => {
    6. setA((old) => {
    7. old.b = 'yx'
    8. return old
    9. })
    10. }
    11. useEffect(() => {
    12. /** 当组件挂载时执行一次changeA */
    13. changeA ()
    14. },[])
    15. /**当changeA执行却没有打印 a*/
    16. useEffect(() => {
    17. /** 执行逻辑 */
    18. console.log(a)
    19. },[a])

    解决的办法 

    1. const [a, setA] = useState({
    2. b: 'dx',
    3. c: '18',
    4. })
    5. const changeA = () => {
    6. setA((old) => {
    7. const newA = {...old}
    8. newA .b = 'yx'
    9. return newA
    10. })
    11. }
    12. useEffect(() => {
    13. /** 当组件挂载时执行一次changeA */
    14. changeA ()
    15. },[])
    16. /**当changeA执行打印 {b:'yx',c:'18'} */
    17. useEffect(() => {
    18. /** 执行逻辑 */
    19. console.log(a)
    20. },[a])

  • 相关阅读:
    消息队列之RabbitMQ介绍与运用
    淘宝商品评论数据爬取:Python实战指南
    【不三不四的脑洞】大龄程序猿 “奇葩” 相亲记 | 年中总“劫”
    java并发编程1
    qt之实现鼠标操作子控件移动窗体(亲测简单好用,有问题私聊)
    python基础之字典的访问
    UVA297 四分树 Quadtrees
    年仅 16 岁的黑客少年,竟是搅乱 IT 巨头的幕后主使?
    11 月 11 日 ROS 学习笔记——ROS 架构及概念
    Nacos本地修改编译源码2.2.3
  • 原文地址:https://blog.csdn.net/m0_49471668/article/details/133815558