首页 > 其他分享 >测试之前项目中关于useEffect的疑惑

测试之前项目中关于useEffect的疑惑

时间:2022-08-30 12:12:52浏览次数:66  
标签:疑惑 const 测试 num setNum 刷新 useEffect 页面

1.监听组件自己的数据

第一种:组件内数据不发生改变,react自带的diffling算法,起了作用,页面不刷新,回调也不会执行

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

export default function C() {
    const [num,setNum] = useState(0);
    useEffect(()=>{
        console.log("我被执行了");
    })
    const add1 = ()=>{
        setNum(num)
    }
  return (
    <div>
      <input type="text" placeholder={num}/>
      <button onClick={()=>add1()}>+1</button>
    </div>
  )
}

 

 第二种:第二参数啥也不写,只要组件里面num变了:useEffect中的回调一直执行;页面一直刷新,刷新也就意味着再一直渲染

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

export default function C() {
    const [num,setNum] = useState(0);
    useEffect(()=>{
        console.log("我被执行了");
    })
    const add1 = ()=>{
        setNum(num+1)
    }
  return (
    <div>
      <input type="text" placeholder={num}/>
      <button onClick={()=>add1()}>+1</button>
    </div>
  )
}

 

 第三种:useEffect第二参数是一个[],只要组件内数据num改变,只执行一次回调,之后不再执行该回调;页面一直渲染,

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

export default function C() {
    const [num,setNum] = useState(0);
    useEffect(()=>{
        console.log("我被执行了");
    },[])
    const add1 = ()=>{
        setNum(num+1)
    }
  return (
    <div>
      <input type="text" placeholder={num}/>
      <button onClick={()=>add1()}>+1</button>
    </div>
  )
}

 

 第四种:useEffect第二参数是num依赖,即[num],只要num改变,就会执行回调,否则不执行回调;页面一直刷新;当第一次数据改变之后,比如+1后,num=2,进行setNum后,useEffect回调不执行,但是页面刷新一次,此后执行该操作,页面将不再刷新,除非num改变,会再出现"页面刷新一次,此后执行该操作,页面将不再刷新"。

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

export default function C() {
    console.log(111)
    const [num,setNum] = useState(0);
    useEffect(()=>{
        console.log("我被执行了");
    },[num])
    const add1 = ()=>{
        setNum(num+1)
    }
    const shuaxin = ()=>{
        setNum(num)
    }
  return (
    <div>
      <input type="text" placeholder={num}/>
      <button onClick={()=>add1()}>+1</button>
      <button onClick={()=>shuaxin()}>刷新</button>
    </div>
  )
}

监听自己的组件的数据总结:

  1. 首先整个组件内数据不变,useEffect回调、页面刷新只执行一次
  2. 整个组件内数据先发生改变,回调一次页面刷新一次,随后不变,回调不执行,页面刷新一次,也就是说,只要整个组件内数据发生改变,页面一直刷新,回调看第二参数
  3. 控制第二参数,不写,整个组件只要有数据改变,就执行回调;为【】,无论数据改变,回调只执行一次;为【num】监听num,只针对num变,回调就执行

2.监听组件外来数据

标签:疑惑,const,测试,num,setNum,刷新,useEffect,页面
From: https://www.cnblogs.com/qiao-16/p/16638838.html

相关文章

  • 【性能测试】性能需求指标
    摘要:了解需求,明确目的,获取(线上)数据加以分析,制定指标 1.1新上线项目1、指标以目的为导向1)容量验证——某软硬件条件下系统最大处理能力,为运维提供容量模型/预估2)稳......
  • 【测试经验向】提测质量差 + `测试工期压缩,我要怎么办?
    写下这行标题,其实我的内心是崩溃的,因为还在等待bug修复开个玩笑,其实还好啦,作为一个快5年的测试中鸟,这点自我调节能力还是有的。新工作入职小半年,最近其实才陆续铺开工......
  • 网站测试自动化入门 |无浏览器指南
    网站测试自动化入门|无浏览器指南奖励:如果您喜欢我们的内容和这篇“网络自动化测试”文章,您可以加入我们的网络浏览器自动化松弛社区.软件开发生态系统处于不断变......
  • 单元测试
    什么是单元测试(unittesting)单元测试,是指对软件中的最小可测试单元进行检查和验证单元就是人为规定的最小的被测功能模块一般来说,要根据实际情况去判定其具体含义,如C......
  • 才储性格测试(INTJ 专家型——追求能力与独立)
    INTJ专家型——追求能力与独立一、你的荣格理论图形二、基本描述才储分析:您的性格类型倾向为“INTJ”(内向直觉思维判断倾向度:I60N56T74J52不假思索指数:19......
  • 性能测试 - JMeter插件管理
    性能测试-JMeter插件管理 beforewin10+JMeter5.2.1jmeter支持插件扩展,一般我们选择使用jmeter提供的插件管理器来下载插件。插件管理器使用之前要先安装。插......
  • MySQL(三)+测试题
    MySQL索引在MySQL中,创建MySQL的索引主要是为了提⾼MySQL查询的效率。但是添加太多的索引也是会降低更新表的速度的,因为对表进⾏DML操作的时候,MySQL的内部不仅仅要保存数......
  • 使用doctest代码测试和Sphinx自动生成文档
    python代码测试并自动生成文档Tips:两大工具:doctest--单元测试、Sphinx--自动生成文档1.doctestdoctest是python自带的一个模块。doctest有两种使用方式:一种是嵌入到pyth......
  • 渗透测试 vs 漏洞扫描:差异与不同
    渗透测试和漏洞扫描常常被混淆,这两者都通过探索系统来寻找IT基础架构中的弱点及易受攻击的地方。阅读本文,带你了解两者之间的差异与不同。手动vs自动渗透测试是一种......
  • 软件测试所需知识
    一、Linux必备知识linux作为现在最流行的软件环境系统,一定需要掌握,目前的招聘要求都需要有linux能力。 二、Shell脚本掌握shell脚本,包括shell基础与应用、shell逻辑控......