一个useState学会React的主要思想
admin
2024-02-14 04:04:59
0

正经学徒,佛系记录,不搞事情

皮毛React开发者:一个useState有什么好学的,hook那么多,哪个不比useState难
自身React开发者:学的不是如何使用,而是为什么会这样

直接进入主题,对React文档案例进行分析,可以先给出点击按钮后numebr的值再看解释

import { useState } from 'react';export default function Counter() {const [number, setNumber] = useState(0);return (<>

{number}

) }

反正肯定不是3,是3还有什么好学的,理解这个问题首先要知道React的渲染机制,React为了能够更快的渲染,会挣对state的值的变化去渲染对应的组件,而不是整个页面重新渲染,并且会自动渲染全部相关嵌套的组件。

对于普通的JavaScript的变量 let number = 0; 即使是对number的值进行操作,也是不会重新渲染组件,这是因为React遵循两个基本原则

  • 内存变量不会在每次重新渲染中保存下来
  • 改变内存变量不会触发重新渲染

因此引入了useState的hook,而上面例子useState的setNumber改变会触发重新渲染。React渲染的机制是等待整个event handler完成后才会触发渲染,它有一个队列的概念,而上面的例子就是将三个 setNumber(number + 1); 加入到Queue中后在一次性渲染,要问为什么,三次计算完成后渲染一次快,还是计算三次的同时渲染三次快呢,尤其是在如果三次计算都是操作同一个值的情况,多次渲染将会是非常浪费的一个动作。

有了这些概念,再来看例子,上面例子的解释就是useState setNumber在某个event hander中并不会改变变量number的值,numebr的值只在重新渲染后生效,即,整个onClick方法执行完才会渲染number的值,因此console.log的值全都是0,而Queue里是同时执行了三次setNumber(0 + 1);,最终的结果是 1


import { useState } from 'react';export default function Counter() {const [number, setNumber] = useState(0);return (<>

{number}

) }

这一个例子的关键点在于 n => n+1,这意味着每次setNumber的 n 都是用上一次的值,结果是3

queued updatenreturns
n => n + 100 + 1 = 1
n => n + 111 + 1 = 2
n => n + 122 + 1 = 3

第一个例子中的setNumber(number + 1); 其实等同于setNumber(n => number + 1);

queued updatenreturns
n => number + 100 + 1 = 1
n => number + 110 + 1 = 1
n => number + 120 + 1 = 1

import { useState } from 'react';export default function Counter() {const [number, setNumber] = useState(0);return (<>

{number}

) }

一样的,画出表格就知道最终的值,6

queued updatenreturns
n => number + 500 + 5 = 5
n => n + 155 + 1 = 6

import { useState } from 'react';export default function Counter() {const [number, setNumber] = useState(0);return (<>

{number}

) }

结果42

queued updatenreturns
n => number + 500 + 5 = 5
n => n + 155 + 1 = 6
n => 42642 = 42

相关内容

热门资讯

定制系统数据安卓转苹果,体验跨... 你有没有想过,手机从安卓转到苹果,这中间的数据迁移,是不是就像搬家一样,既繁琐又让人头疼?别急,今天...
iphone怎么刷安卓双系统 你有没有想过,你的iPhone也能变身成为安卓双系统的小能手呢?没错,就是那个我们平时用来打电话、刷...
安卓系统网络拦截怎么设置,轻松... 你有没有遇到过这种情况:在使用安卓手机时,突然弹出一个广告,让你忍不住想关掉它?或者有时候,一些不安...
苹果系统和安卓系统的区别ppt... 你有没有想过,为什么你的手机里装的是苹果系统而不是安卓系统呢?是不是好奇它们之间有什么不一样的地方?...
安卓系统隐藏运行程序 你知道吗?手机里那些看似安静的小程序,其实可能正在偷偷地运行着呢!是不是觉得有点不可思议?别急,让我...
安卓设置系统简体与繁体,探索安... 亲爱的手机控们,你是否在某个瞬间,突然对手机上的文字产生了好奇,想要知道如何轻松切换安卓系统中的简体...
平凉综合办公系统安卓,便捷高效... 你有没有听说过那个超级方便的平凉综合办公系统安卓版?没错,就是那个能让你的工作生活变得更加轻松的神奇...
安卓系统的实验报告,深入剖析与... 你知道吗?最近我在手机上做了一场有趣的实验,就是测试安卓系统的性能。这可不是随便玩玩,而是真的深入研...
oppo安卓9系统如何,功能亮... 你有没有发现,你的OPPO手机最近是不是有点儿不一样了?是不是觉得它变得更加聪明、更加流畅了呢?哈哈...
苹果装安卓系统卡吗 你有没有想过,把苹果手机换成安卓系统,是不是就像换了个新世界?不过,听说有人担心,苹果装上安卓系统会...
rog安卓10系统键盘下面,键... 亲爱的读者,你是否曾在使用安卓手机时,对那小小的键盘下面隐藏的神秘世界感到好奇?今天,就让我带你一探...
618推荐手机安卓系统 618购物节又要来了!是不是已经迫不及待想要换一部新手机了呢?别急,今天我就要给你推荐几款在安卓系统...
4寸手机安卓系统吗 你有没有想过,为什么现在的手机屏幕越来越小,却依然能塞进那么多的功能呢?今天,我们就来聊聊这个话题:...
安卓系统开启后台程序,高效管理... 你有没有发现,手机里的安卓系统越来越智能了?它就像一个贴心的管家,默默地在后台为你打理着各种事务。但...
战地1内存和安卓系统,战地1内... 你有没有发现,最近玩《战地1》的小伙伴们都在抱怨内存不够用?别急,让我来给你详细解析一下这个问题,顺...
电脑连接安卓系统手机,探索跨平... 你有没有想过,你的电脑和安卓手机之间也能来个亲密接触呢?没错,就是那种无缝连接的感觉,让你的手机屏幕...
安卓系统和ios系统玩吃鸡 你有没有发现,最近不管是大街小巷,还是线上线下的聚会,提到最多的游戏就是“吃鸡”啦!这款游戏可谓是风...
阻止安卓系统杀程序,如何有效阻... 你有没有遇到过这种情况?手机里装了好多喜欢的应用,可是一不小心,某个程序就被安卓系统无情地杀掉了。别...
国内安卓系统大小对比图,国内安... 你有没有想过,我们每天使用的安卓系统,其实就像是一个庞大的“城市”,里面住着各种各样的“居民”,而这...
苹果和安卓系统大小,系统规模对... 你有没有想过,为什么你的手机里装了那么多应用,可内存还是不够用呢?今天,就让我带你一探究竟,揭秘苹果...