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

React中的Hook

React Hooks的意思是,组件尽量写成纯函数,如果需要外部功能和副作用,就用钩子把外部代码“钩”进来。

1、useState:状态钩子

useState用于为函数组件引入状态(state)。纯函数不能有状态,所以把状态放在钩子里面。

例子:

import { useState } from 'react'export default function HooksPage() {const [count, setCount] = useState(0);return (<div onClick={() => setCount(count+1)}>{count}</div>)
}

2、useEffect: 副作用钩子

useEffect用来引入具有副作用的操作,如向服务器请求数据。

useEffect接受两个参数。第一个参数是一个函数,依赖变化时执行的操作;第二个参数是一个数组,用于给出Effect的依赖项,只要这个数组发生变化,useEffect就会执行。第二个参数可以省略,这样每次组件渲染时,会执行useEffect。

例子:

import { useState, useEffect } from 'react'export default function HooksPage() {const [count, setCount] = useState(0);useEffect(() => {//副作用动作}, [count])return (<div onClick={() => setCount(count+1)}>{count}</div>)
}

3、useCallback

useCallback简单来说就是返回一个函数,只有在依赖项发生变化时才会更新(返回一个新函数)。

例子:

import { useState, useCallback } from 'react'export default function HooksPage() {const [count, setCount] = useState(0);const [count1, setCount1] = useState(0);const count1Add = useCallback(() => {setCount1(count1+1)}, [count]);return (<div onClick={() => setCount(count+1)}>{count}<button onClick={count1Add}>callback count1:{count1}</button></div>)
}

4、useMemo

useMemo、useCallback都是使参数(函数)不会因为其他不相关的参数变化而重新渲染。useMemo与useEffect都是用来避免重复渲染,优化性能的,不同的是useMemo返回的是个数值,而useCallback返回的是个函数。

传入useMemo的函数会在渲染期间执行。请不要在这个函数内部执行与渲染无关的操作,诸如副作用这类的操作属于useEffect的适用范畴,而不是useMemo。

例子:

import { useState, useMemo } from 'react'export default function HooksPage() {const [count, setCount] = useState(0);const memoValue = useMemo(() => {return count + 1}, [count])return (<div onClick={() => setCount(count+1)}>{count} memoValue:{memoValue}</div>)
}

5、useContext:共享状态钩子

组件之间共享状态,则可以使用useContext。

例子:

1、创建共享内容

import {useState, createContext} from 'react';//定义公用参数,方法
export const useTestContext = () => {const [count, setCount] = useState(0);return {count, setCount}
}export const TestContext = createContext({count: 0,setCount: (count: number) => count
})

2、创建共享组件

import {TestContext, useTestContext} from './hooks/useTestContext.jsx'
import Test1 from './Test1.jsx'
import Test2 from './Test2.jsx'export default function app() {return (<TestContext.Provider value={useTestContext()}><Test1/><Test2/></TestContext.Provider>)
}

Test1.jsx

import {useContext} from 'react';
import {TestContext} from './hooks/useTestContext.jsx';export default function Test1() {const {count, setCount} = useContext(TestContext);return (<div onClick={()=>setCount(count+1)}>{count} ++</div>)
}

Test2.jsx 同 Test1.jsx

http://www.dtcms.com/a/397908.html

相关文章:

  • React简单例子
  • Playwright MCP 服务器对比高层级的 MCP 服务器解决方案
  • app下载网站模板wordpress将公网ip改为域名
  • 个人做网站如何推广安全优化大师
  • jupyter notebook用简易python代码跑本地模型
  • Android 安卓RIL介绍
  • 开源 java android app 开发(十五)绘图定义控件--仪表盘
  • Android如何自动弹出软键盘?
  • Linux Shell 脚本:从零到进阶的实战笔记
  • MR 一体机市场报告:2031全球规模突破 1.98亿美元,中国 40.8% 市占率成核心增长极
  • 网站管理员权限权重高的网站有哪些
  • 【Spark+Hive+hadoop】基于spark+hadoop基于大数据的全球用水量数据可视化分析系统大数据毕设
  • 07.【Linux系统编程】进程控制(进程创建fork、进程终止exit等、进程等待waitwaitpid、进程替换execl等)
  • 百度Qianfan-VL系列上线:推出3B/8B/70B三款视觉理解模型,覆盖不同算力需求
  • 基于 Python Keras 实现 猫狗图像的精准分类
  • 点云-标注-分类-航线规划软件 (一)点云自动分类
  • 挑战用R语言硬干一百万单细胞数据分析
  • 如何自己弄个免费网站wordpress前端登陆
  • npm install 时包库找不到报错解决
  • 【开题答辩实录分享】以《城市网约车服务预约与管理小程序的设计与实现》为例进行答辩实录分享
  • 网站建设软件哪个最好wordpress转发插件
  • C#异步协同常用例子
  • Flutter 中使用 Color 的最优方案
  • 一半都有哪些做影视外包的网站怎么做网站的签约编辑
  • Qt QEventLoop的使用的一个问题讨论
  • 保定网站seo技术wordpress主题左目录
  • net网站开发做手工简笔上海手机网站建设
  • 做地图的网站湖北专业网站建设市面价
  • 拜师做网站网站短链接生成
  • 用狐狸做logo的网站虾皮跨境电商注册多少钱