react hooks 渲染性能
目录
重复渲染
简介:在 react 中 props 和state改变时,子组件会重新渲染
React.memo()
简介:子组件不操作props和state 使用 React.memo() 控制子组件重复渲染
- React v16.6引进来的新属性,用来控制函数组件的重新渲染
- 将组件作为函数(memo)的参数,函数的返回值(Child)是一个新的组件
例子
import * as React from "react";
import { View, Button, Text } from "@tarojs/components";
const UseChild: React.FC = React.memo(() => {
console.log("渲染了11111");
return <View>子1</View>;
});
const UseChild2: React.FC = React.memo(() => {
console.log("渲染了2222");
return <View>子2</View>;
});
const UseTest: React.FC = () => {
const [state, setState] = React.useState(0);
const add = () => {
// 只会渲染一次
setState(val => val + 1);
};
return (
<View>
<Text>{state}</Text>
<Button onClick={add}>支付</Button>
<UseChild></UseChild>
<UseChild2></UseChild2>
</View>
);
};
export default UseTest;
React.useMemo
简介:如果参数是对象,使用 React.useMemo 控制子组件重复渲染
例子
import * as React from "react";
import { View, Button, Text } from "@tarojs/components";
// === 父组件 ===
const UseTest: React.FC = () => {
const [count, setCount] = React.useState(0);
const increment = () => {
setCount(count + 1);
};
// 备注:如果是 useState 解构的 子组件不会重复渲染
// const [userInfo, setUserInfo] = useState({ name: "小明", age: 18 });
// const userInfo = { name: "小明", age: 18 }; 子组件会重复渲染
const userInfo = React.useMemo(() => ({ name: "小明", age: 18 }), []);
return (
<View>
<Button onClick={increment}>点击次数:{count}</Button>
<UseChild userInfo={userInfo}></UseChild>
</View>
);
};
// === 子组件 ===
const UseChild: any = React.memo((props: any) => {
const { userInfo } = props;
console.log("渲染了11111", userInfo);
return (
<View>
<View>{userInfo.name}</View>
<View>{userInfo.age}</View>
</View>
);
});
export default UseTest;
React.useMemo 也可以绑定 jsx和tsx对象
const TestChild: React.FC = React.memo(props => {
console.log("渲染 1111");
return (
<View>
<Text>child 组件 </Text>
{props.children}
</View>
);
});
const TestParent: React.FC = () => {
const [state, setState] = React.useState(0);
// 子组件只会渲染一次
const el = React.useMemo(() => {
return <View>22222</View>;
}, []);
return (
<View>
<Button onClick={() => setState(state + 1)}>点击次数{state}</Button>
<TestChild>{el}</TestChild>
</View>
);
};
React.useCallback()
- 改变父元素的state值,近而渲染父组件
- 父组件渲染时,会重新渲染onclick事件,近而连锁反应,被动传值给子组件,导致子组件渲染
- 如果props传入的是 基础数据类型,子组件不会渲染
例子
import * as React from "react";
import { View, Button, Text } from "@tarojs/components";
// === 父组件 ===
const UseTest: React.FC = () => {
const [name, setName] = React.useState("zhangds");
// 会重复渲染子组件
// const click = () => {
// setName(name);
// };
// 只会渲染一次
const click = React.useCallback((name: string) => {
setName(name);
}, []);
return (
<View>
<Text>{name}</Text>
<UseChild name="zhangds" click={click}></UseChild>
</View>
);
};
// === 子组件 ===
const UseChild: any = React.memo((props: any) => {
const { name, click } = props;
console.log("渲染了11111", name);
return (
<View>
<Button onClick={() => click("zhudachang")}>sss</Button>
</View>
);
});
export default UseTest;
react hooks 渲染性能的更多相关文章
- react+redux渲染性能优化原理
大家都知道,react的一个痛点就是非父子关系的组件之间的通信,其官方文档对此也并不避讳: For communication between two components that don't ha ...
- useMemo优化React Hooks程序性能(九)
useMemo主要用来解决使用React hooks产生的无用渲染的性能问题.使用function的形式来声明组件,失去了shouldCompnentUpdate(在组件更新之前)这个生命周期,也就是 ...
- React + Reflux 渲染性能优化原理
作者:ManfredHu 链接:http://www.manfredhu.com/2016/11/08/23-reactRenderingPrinciple 声明:版权所有,转载请保留本段信息,否则请 ...
- reselect是怎样提升react组件渲染性能的?
reselect是什么? reselect是配合redux使用的一款轻量型的状态选择库,目的在于当store中的state重新改变之后,使得局部未改变的状态不会因为整体的state变化而全部重新渲染, ...
- 相当有用的react+redux渲染性能优化原理
学习地址:http://foio.github.io/react-redux-performance-boost/
- React爬坑秘籍(一)——提升渲染性能
React爬坑秘籍(一)--提升渲染性能 ##前言 来到腾讯实习后,有幸八月份开始了腾讯办公助手PC端的开发.因为办公助手主推的是移动端,所以导师也是大胆的让我们实习生来技术选型并开发,他来做code ...
- 你真的会用react hooks?看看eslint警告吧!(如何发请求、提升代码性能等问题)
前言 看过几个react hooks 的项目,控制台上几百条警告,大多是语法不规范,react hooks 使用有风险,也有项目直接没开eslint.当然,这些项目肯定跑起来了,因为react自身或者 ...
- react新特性 react hooks
本文介绍的是react新特性react hooks,本文面向的是有一定react开发经验的小伙伴,如果你对react还不是很熟悉的话我建议你先学习react并多多联系. 首先我们都知道react有3种 ...
- 30分钟精通React今年最劲爆的新特性——React Hooks
你还在为该使用无状态组件(Function)还是有状态组件(Class)而烦恼吗? --拥有了hooks,你再也不需要写Class了,你的所有组件都将是Function. 你还在为搞不清使用哪个生命周 ...
- React Hooks 你不来了解下?
前言 最近在看 React 的新语法-- React Hooks,只能一句话概括:React 语法真的是越来越强大,越写代码越少. 强烈推荐还没看 React Hooks 的同学去学习下,这会让你写r ...
随机推荐
- SMU 2024 spring 天梯赛自主训练2
SMU 2024 spring 天梯赛自主训练2 7-1 I Love GPLT - SMU 2024 spring 天梯赛自主训练2 (pintia.cn) PHP 点击查看代码 I L o v e ...
- WPF控件结构与Content理解
WPF控件结构 WPF中控件继承图 我们平时所用的容器如Grid.StackPanel等都是继承Panel 控件类型分为3组:内容控件.Items控件.TextBoxBase 如何理解Content? ...
- .netcore生命周期、消息管道
.NET Core 的初始化过程涉及多个步骤,这些步骤从应用程序的启动开始,一直到应用程序准备好处理请求.下面是一个简化的概述,描述了 .NET Core 应用程序(特别是 ASP.NET Core ...
- C++开发分类
1.基础架构 2.音视频领域 3.安全方向 4.Linux虚拟化 5.Qt客户端.上位机 6.游戏领域 7.嵌入式 8.量化券商 暂时对基础架构.音视频和安全方向较为感兴趣.
- Diskpart 操作
DiskPart 是 Windows 操作系统中的一个命令行工具,用于管理磁盘分区.它可以创建.删除.格式化和调整分区大小,还可以设置活动分区等.以下是一些常用的 DiskPart 命令和操作步骤. ...
- 一个故事讲解https
1 序言 今天来聊一聊https 安全传输的原理. 在开始之前,我们来虚构两个人物, 一个是位于中国的张大胖(怎么又是你?!), 还有一个是位于米国的Bill (怎么还是你?!). 这俩哥们隔着千 ...
- 《放弃繁琐的if-else》开启Assert断言的新时代
一.场景再现 我们平时在service操作数据库,难免会出现这种情况: if(null == result){ }else{ } 这样的代码会吞噬掉你有限的代码空间,虽然通俗易懂,但一旦爆炸式的袭来, ...
- postgresql数据库中 JSON 字段 replace
一.需求 postgresql 数据库,需要将某些表中的json字段的数据进行替换. 二.做法 思路:将json字段转为text,然后调用replace函数后,将text再转为json update ...
- 论文阅读翻译之Deep reinforcement learning from human preferences
论文阅读翻译之Deep reinforcement learning from human preferences 关于 首次发表日期:2024-09-11 论文原文链接:https://arxiv. ...
- 小tips: HTTP 请求过程示例图及名称解释
一个 HTTP 请求过程示例图: 一个 HTTP 请求需要经历以上过程,接下来看一个具体的例子: 名词解释: Queueing: 在请求队列中的时间. Stalled: 从TCP 连接建立完成,到真正 ...