1 State Hook

  • Hook,使用在函数组件中
  • 不要在循环,条件或嵌套函数中(if、switch、for)调用 Hook
    在这里插入图片描述

1. 函数指向相同的引用

在这里插入图片描述

  • 更新方式:函数组件中state变化时才重新渲染(React使用Object.is比较算法来比较state);
  • 而类组件每次都会更新

2.强制刷新

  • 函数组件
import { useState } from 'react'
window.arr = []
// create react app是基于webpack(模块化打包工具),如果用var声明arr,arr只是在当前文件夹,并不是在全局
// 要想在全局访问arr需要添加到window上
export default function App(props) {const [, setCount] = useState({});window.arr.push(setCount)console.log('全局的arr', window.arr)return (<><button onClick={() => setCount({})}>click</button></>)
}
  • 类组件中,this.setState传任何值都会刷新组件
  • 类组件中可以用this.forceUpdate()强制刷新,不会经过shouldComponentUpdate生命周期
    在这里插入图片描述

3. 函数更新和不同的返回值的更新

import { useState } from 'react'
window.arr = []
// create react app是基于webpack(模块化打包工具),如果用var声明arr,arr只是在当前文件夹,并不是在全局
// 要想在全局访问arr需要添加到window上
export default function App(props) {const [count, setCount] = useState(+0);window.arr.push(setCount)console.log('全局的arr', window.arr)const onClick = () => {setCount(count + 1)console.log('初始状态', count) // 第一次点击:打印0(上一次的值而不是最新的返回值)setCount(count + 1) // 因此,即使在这里执行多次,更新后count都为1}console.log('最新状态', count) // 第一次点击:打印1return (<><h1>{count}</h1><button onClick={onClick}>click</button></>)
}

在这里插入图片描述

import { useState } from 'react'
export default function App(props) {const [count, setCount] = useState(+0);const onClick = () => {setCount(count => count + 1) // 闭包,用最新的count进行更新setCount(count => count + 1)console.log('初始状态', count) // 第一次点击:打印0(上一次的值而不是最新的返回值)}console.log('最新状态', count) // 第一次点击:打印2 (点击时递增了2次)return (<><h1>{count}</h1><button onClick={onClick}>click</button></>)
}

在这里插入图片描述

4. setCount是会合并的

  • 多个setCount则执行多次,但最终只render一次
  • 类组件:返回值合并(state的多个属性合并),函数组件中不会合并,直接用setCount的参数更新了
import { useState } from 'react'
export default function App(props) {const [count, setCount] = useState({ num1: 1 });const onClick = () => {setCount({ new: 2 })}console.log('更新后', count)return (<><h1>{count.num1}</h1><button onClick={onClick}>click</button></>)
}

在这里插入图片描述
在这里插入图片描述

5. 惰性初始化

initialState参数只会在组件的初始渲染中起作用,后续渲染时会被忽略。

const [count, setCount] = useState(() => {console.log(1); // 惰性初始化,只会打印一次return 1
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/250818.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

⊰第五篇⊱ 队列

队列&#xff08;queue&#xff09;是只允许在一端进行插入操作&#xff0c;而在另一端进行删除操作的线性表。 队列是一种先进先出的&#xff08;First In First Out&#xff09;的线性表&#xff0c;简称FIFO。允许插入的一端为队尾&#xff0c;允许删除的一端为队头。队列不…

es6 --- 数组的扩展

经常遇到对数组的操作…下面是《ES6标准入门》(第3版)中对数组扩展的(部分)描述: 扩展运算符(…): console.log(...[1,2,3]) // 1 2 3console.log(1, ... [2,3,4], 5) // 1 2 3 4 5扩展运算符代替数组的apply方法 // ES5 function f(x,y,z) {// ... } var args [1,2,3]; f.a…

算法 - 排序稳定性总结

排序方式 时间复杂度 空间复杂度 稳定性 平均情况 最坏情况 最好情况 插入排序 O(n^2) O(n^2) O(n) O(1) 稳定 希尔排序 O(n^1.3) O(1) 不稳定 冒泡排序 O(n^2) O(n^2) O(n) O(1) 稳定 快速排序 O(nlogn) O(n^2) O(nlogn) O(logn) 不稳定 选择排…

node --- 实践中理解跨域

经常可以见到.说解决跨域只要返回加上"Access-Control-Allow-Origin"头部就行… 下面从实践中一步一步的理解. 1.环境准备: 1. node.js (http://nodejs.cn/) 自行下载配置, 完毕后(cmd)输入 node --version 若显示版本号则代表成功// ps: node(中的npm)方便下载资源…

熟悉常用的Linux操作

cd命令&#xff1a;切换目录 &#xff08;1&#xff09; 切换到目录 /usr/local Cd /usr/local &#xff08;2&#xff09; 去到目前的上层目录 Cd .. &#xff08;3&#xff09;回到自己的主文件夹 Cd ~ ls命令&#xff1a;查看文件与目录 &#xff08;4&#xff09;查看…

2 Effect Hook

副作用&#xff1a;和外部有交互 引用外部变量调用外部函数修改dom、全局变量ajax计时器&#xff08;依赖window.setTimeout&#xff09;存储相关 纯函数&#xff1a;相同的输入一定会得到相同的输出 Effect Hook可以让你在函数组件中执行副作用操作 类组件中处理副作用 在com…

【JUC】CountDownLatch

因为在调用端的异步中&#xff0c;需要调用其他多个服务获取数据再汇总结果返回&#xff0c;所以用到了CountDownLatch CountDownLatch的概念 CountDownLatch是一个同步工具类&#xff0c;用来协调多个线程之间的同步&#xff0c;或者说起到线程之间的通信&#xff08;而不是用…

node --- Missing write access to 解决

今天在使用npm安装animate.css时报错… 大体原因是没有对node_modules没有写的权限. 百度查到是要删除对应的node_modules然后在安装… 但是我并不想这样做…想起前面我为了加快下载速度,好像使用的是cnpm… 于是我使用了nrm ls 查看当前使用的源 更换npm的源可以参考 https:…

3 useReducer及其实现

pureComponent import { useState } from "react" // useReducer, // 统一调度 function reducer(state, action) {console.log(reducer接收参数, state, action)const { type } actionswitch (type) {case add:return { num: state.num 1 }case minus:return { n…

Django 之 权限系统(组件)

参考: http://www.cnblogs.com/yuanchenqi/articles/7609586.html 转载于:https://www.cnblogs.com/bigtreei/p/8564243.html

vue踩坑- 报错npm ERR! cb() never called!

在vue项目中引入饿了么elementUI组件的步骤之中&#xff0c;出现以下的错误&#xff1a; D:\my-project-first>npm i element-ui -S Unhandled rejection RangeError: Maximum call stack size exceededill install loadIdealTreeat RegExp.test (<anonymous>)at D:\n…

maven之阿里云Maven镜像的使用

Maven中央仓库在国外&#xff0c;速度比较慢&#xff0c;所以我们采用国内的镜像&#xff0c;速度回有质的提升。 配置下setting.xml <mirrors><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/ne…

vue --- 使用animate.css实现动画

1.下载animate.css npm install --save-dev animate.css// 注意你使用的源 nrm ls(若没有改变可以忽略)2.导入animate.css <link rel"stylesheet" href"../node_modules/animate.css/animate.css"> // 注意你的当前文件和node_moudules文件夹的相对…

4 contextHook

类组件createContext、静态属性contextType 与函数组件useContext 的对比 import { Component, createContext, useContext } from react const AppContext createContext(0) class Foo extends Component {render() {return (<AppContext.Consumer>{value > (Foo: …

【leetcode 简单】 第一百一十题 分发饼干

假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。对每个孩子 i &#xff0c;都有一个胃口值 gi &#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j &#xff0c;都有一个尺寸 sj 。…

基于openstack搭建百万级并发负载均衡器的解决方案

最近&#xff0c;喜欢研究一些国外技术大咖们的文章&#xff0c;而这篇文章是基于openstack负载均衡器的解决方案&#xff0c;做的一些总结~希望能够给小伙伴带来一些灵感或者帮助。 openstack现有的负载均衡解决方案&#xff0c;无论是lbaas plugin还是octavia&#xff0c;后端…

5 useMemouseCallback

useMemo 优化渲染 现象 App每次重新执行时&#xff0c;render变化了&#xff0c;引用的render不是同一个函数 import React, { useState, } from "react"; const Foo props > {return <ul>{props.render()}</ul> } function App() {const [range…

vue --- 动画执行的周期(动画的钩子函数)

如下8个: <transitionv-on:before-enter "beforeEnter"v-on:enter "enter"v-on:after-enter "afterEnter"v-on:enter-cancelled "enterCancelled"v-on:before-leave "beforeLeave"v-on:leave "leave"v-…

二分查找c++

相信对于二分查找的原理大家已经明白&#xff0c;接下来就是代码实现了 1 #include <iostream>2 #include <cstdio>3 #include <algorithm>4 #include <cstring>5 #include <string>6 #include <cstdlib>7 8 using namespace std;9 10 in…

php获取网址

1 #测试网址: http://localhost/blog/testurl.php?id52 3 //获取域名或主机地址 4 echo $_SERVER[HTTP_HOST]."<br>"; #localhost5 6 //获取网页地址 7 echo $_SERVER[PHP_SELF]."<br>"; #/blog/testurl.php8 9 //获取网址参数 10 echo …