首页 > 其他分享 >Day_2

Day_2

时间:2024-11-12 10:21:16浏览次数:1  
标签:count 初始化 const 渲染 Effect 组件 Day

React - 机制

Chapter 2


  • Effect

    • Effect与组件是相互独立的生命周期。Effect的执行会是在组件渲染完提交到屏幕上后执行,并且在组件卸载后也会执行相应的清理函数来卸载

      • 因为Effect是在渲染后执行,所以如果在Effect中修改state值,会导致组件的重新渲染。
    • import { useEffect } from 'react'
      export default function() {
          const [count, setCount] = useState(0);
          const [num, setNum] = useState(0);
          
          function changeNum() {
              setNum(num + 1);
          }
          
          // React初始化渲染count后,useEffect执行setCount,又导致React的重新渲染
          // 如果不想num的变化也调用Effect,就将他提取到外部函数,这样React依赖检测就不会提醒你添加num作为依赖
          useEffect(() => {
              setCount(8);
              changeNum()
          }, [count])
          
          return <div onClick={() => setCount(count + 1)}></div>
      }
      
  • React的DOM Diff算法实现渲染

    • 如果你在相同的位置使用相同的组件然后通过布尔值判断显示哪个,因为它们的DOM结构相同,会导致切换到另一个组件时组件不会进行初始化。(state不会重新执行初始化值)

    • 解决方案

      • 可以给在相同位置的两个组件添加唯一key,这样每次判断切换到另一个组件时,就会进行初始话

      • 可以两行判断,第一行布尔值为true就输出,第二行布尔值为false就输出。这样子由于DOM结构处于不同位置,也可以实现切换组件重新进行初始化

      • const Item = (title) => {
            const [count, setCount] = useState(0);
            return <div onClick={() => setState(count + 1)}>
            	{ title } : { count }
            </div>
        }
        
        export default function() {
            const [isHidden, setIsHidden] = useState(true);
            
            // 如果在为first组件点击了5次,那么当前的count会是5
            // 然后setIsHidden为false,将会渲染second组件,移除first组件
            // 组件中的title将会变为second,但是state值将仍是5,而不是初始化为0
            // 解决方案就是:3、4组合 或者 5、6组合 都会进行初始化
            return (
            	<div>
                	{isHidden 
                        ? <Item title="first" /> 
                        : <Item title="second" />
                    }
                    
                    {isHidden 
                        ? <Item key="3" title="third" /> 
                        : <Item key="4" title="fourth" />
                    }
                    {isHidden && <Item title="fifth" />}
                    {!isHidden && <Item title="sixth" />}
                </div>
            )
        }
        

标签:count,初始化,const,渲染,Effect,组件,Day
From: https://www.cnblogs.com/jsst/p/18541255

相关文章

  • 团队项目Scrum冲刺-day1
    一、各个成员在Alpha阶段认领的任务成员Alpha陈国金凌枫陈卓恒谭立业廖俊龙曾平凡曾俊涛薛秋昊二、明日各个成员的任务安排成员任务陈国金凌枫陈卓恒谭立业廖俊龙曾平凡曾俊涛薛秋昊三......
  • Day_1
    React-机制Chapter1渲染与变量React的函数式组件会在每次状态发生变化时,重新执行。如果在hook中声明了普通的变量,那么会在每次状态发生变化重新渲染时,重新进行初始化。exportdefaultfunction(){letx=2;//点击后x虽然加1了,但是由于没有被React监听,......
  • 数字后端零基础入门系列 | Innovus零基础LAB学习Day10
    ###LAB19Innovus在线DRC检查这个章节的学习目标是学会使用数字IC后端设计实现PR工具innovus来检查drc。数字后端零基础入门系列|Innovus零基础LAB学习Day9数字后端零基础入门系列|Innovus零基础LAB学习Day8数字后端零基础入门系列|Innovus零基础LAB学习Day7首先......
  • Day02-映射(mapping)
    1.映射(Mapping)可以理解为对文档及其字段进行索引或存储的方式。可以拿Mapping和关系型数据库中的schema类比,schema在关系型数据库中指:库表包含的字段及字段存储类型等基础信息。下文中映射等价于Mapping。Elasticsearch映射,描述了文档可能具有的字段、属性、每个字段的数据......
  • 代码随想录算法训练营day43| 300.最长递增子序列 674. 最长连续递增序列 718. 最长
    学习资料:https://programmercarl.com/0300.最长上升子序列.html#算法公开课动态规划系列之子序列学习记录300.最长递增子序列(长度最少为1;dp[i]代表到i为止的最长子序列的长度;i的值根据i之前比如j的值来判断;每个地方都有可能获得最长长度)点击查看代码classSolution:def......
  • [CISCN2019 华北赛区 Day2 Web1]Hack World
    题目链接:[CISCN2019华北赛区Day2Web1]HackWorld。打开环境后如下所示。尝试输入1、2、3、4、...,发现仅存在三种结果。即1时,输出"Hello,glzjinwantsagirlfriend."。2时,输出"Doyouwanttobemygirlfriend?"。其他,输出"ErrorOccuredWhenFetchResult."。......
  • DAY109代码审计-PHP模型开发篇&动态调试&反序列化&变量覆盖&TP框架&原生POP链
    知识点1、PHP审计-动态调试-变量覆盖2、PHP审计-动态调试-原生反序列化3、PHP审计-动态调试-框架反序列化PHP常见漏洞关键字SQL注入:selectinsertupdate deletemysql_querymysqli等文件上传:$_FILES,type="file",上传,move_uploaded_file()等XSS跨站:printprint_r......
  • 11.10 javaweb day3 表格,表单标签
    表格标签:定义表格整体,可以包裹多个,1.border:表格边框的宽度2.width:规定表格的宽度3.cellspacing:规定单元之间的空间:表格的行,可以包裹多个:单元格,表头单元格可以换成<body><tableborder="3px"cellspacing="2"width="600px"><tr><th>序号</th>......
  • Day1
    Markdown标题字体Hello,worldHello,worldHello,worldHello,world引用你好,我叫贝利亚分割线图片超链接[点击跳转][青海民族大学有序abcdefg表格X【-∞,1】1【1,+∞】f(x)增函数0减函数f(x)'+极大值_......
  • [CISCN2019 华北赛区 Day2 Web1]Hack World 1
    [CISCN2019华北赛区Day2Web1]HackWorld1打开实例发现是个POST注入框盲猜SQL注入,万能密码检测无果,而且经过测试存在大量sql关键字过滤尝试使用(),出现了bool(false),确定这是一道布尔注入题and被禁用,决定采用异或^注入构建payload脚本梭哈:成功获得flag:flag{a2f7089......