当前位置: 首页 > news >正文

值的注意React中的一些默认行为和优化(一)

父组件重新渲染会递归所有的子,触发子组件的渲染,需要用useMemo

@reduxjs/toolkit  useSelector useDispatch 替代了 connectimport { createSelector } from '@reduxjs/toolkit'import { useDispatch, useSelector } from 'react-redux'

方案一、// 更新数据更精准

const selectUser = createSelector(

(state: any) => state.user,

(user) => user.name,

)

const name = useSelector(selectUser)

方案二、//更精准更新

// const { name } = useSelector((state: any) => state.user) 由于进行对比为 严格对比 === ;引用类型 需要对比引用地址,所以需要使用createSelector

// const { name } = useSelector((state: any) => state.user,shallowEqual) // shallowEqual 浅比较

useId 横跨服务端和客户端唯一Id避免hydration不匹配的

hook(无论渲染多少次始终唯一)。

hydration注入 把原来时间绑定和页面切换 

ssr服务端渲染

csr客户端渲染 

首屏加载速度/seo

域名 判断换成 通过dns解析,IP地址,通过tcp建立连接(三次握手)返回index.html

ssr同构应用,一套代码即可以运行node服务端,也可以在浏览器运行

const [data, setData] = useState<SelectProps['options']>([])

const [value, setValue] = useState<string>()

const deferredValue = useDeferredValue(data)

const [isPending, startTransition] = useTransition()

迭代器


// 原始伪代码
var nums =[]
var iterator = {next(){if(index<nums.length){return {value:nums[index++],done:false}}else{return {value:undefined,done:true}}}
}// 封装类
class Iterator {constructor(container){this.container = containerthis.index = -1}next(){this.index++let {container,index} = thisif(index>=container.length){return {done:true,value:undefined}}return  {done:false,value:container[index]}}}
可迭代对象 (for of)

1.[Symbol.iterator]函数

2.[Symbol.iterator]函数返回迭代器

3.数组,Set,Map, arguments,string

把一个非可迭代对象转为迭代对象

Object.prototype.[Symbol.iterator] = Arrary.prototype.[Symbol.iterator]

//生成器

  • next
  • throw
  • return
//形式
function * test(){
var = value=1yield value++
​​​​​​​}

传参数时 第一次是没办法获取

function *fn(...params){let x = 100
let y = yield x+100yield y+100}
var s = fn('hah')
s.next('hah0')
s.next('hah1')

//嵌套

function * sum{yield 200yield 300
}function * fn{yield 100yield *sum()yield 400
}100 200 300 400
let arr = ['js','html','css']function *genera(){yield * arr
}


 

相关文章:

  • PHP多功能投票微信小程序系统源码
  • 【计算机毕业设计】002基于weixin小程序家庭记账本
  • rancher单节点安装k8s
  • dhtmlx-gantt甘特图数据展示
  • Flutter实现局部刷新的几种方式
  • 网站开发:使用VScode安装yarn包和运行前端项目
  • 论文阅读【时空+大模型】ST-LLM(MDM2024)
  • 实验一:图像信号的数字化
  • 数据结构——考研笔记(三)线性表之单链表
  • MATLAB——字符串处理
  • [ruby on rails]部署时候产生ActiveRecord::PreparedStatementCacheExpired错误的原因及解决方法
  • JS【实战】CSS 样式相关的处理
  • vue3入门特性
  • Excel 学习手册 - 精进版(包括各类复杂函数及其嵌套使用)
  • ES6 对象的新增方法(十四)
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • bootstrap创建登录注册页面
  • Brief introduction of how to 'Call, Apply and Bind'
  • CSS 专业技巧
  • overflow: hidden IE7无效
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • springMvc学习笔记(2)
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 那些年我们用过的显示性能指标
  • 前端相关框架总和
  • 删除表内多余的重复数据
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (13):Silverlight 2 数据与通信之WebRequest
  • (55)MOS管专题--->(10)MOS管的封装
  • (9)STL算法之逆转旋转
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (四)c52学习之旅-流水LED灯
  • (算法)区间调度问题
  • (学习日记)2024.01.09
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (源码分析)springsecurity认证授权
  • *p++,*(p++),*++p,(*p)++区别?
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .NetCore 如何动态路由
  • .net开发时的诡异问题,button的onclick事件无效
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题