iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Hook怎么在React中使用
  • 271
分享到

Hook怎么在React中使用

2023-06-14 22:06:08 271人浏览 独家记忆
摘要

Hook怎么在React中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、useState:让函数式组件拥有状态用法示例:// 计数器impor

Hook怎么在React中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

1、useState:让函数式组件拥有状态

用法示例:

// 计数器import { useState } from 'react'const Test = () => {    const [count, setCount] = useState(0);    return (        <>            <h2>点击了{count}次</h2>            <button onClick={() => setCount(count + 1)}>+1</button>        </>    );}export default Test

PS:class组件中this.setState更新是state是合并, useState中setState是替换。例如:

// 错误示例import { useState } from 'react'const Test = () => {    const [counts, setCounts] = useState({        num1: 0,        num2: 0    });    return (        <>            <h2>num1:{counts.num1}</h2>            <h2>num2:{counts.num2}</h2>            <button onClick={() => setCounts({ num1: counts.num1 + 1})}>num1+1</button>            <button onClick={() => setCounts({ num2: counts.num2 + 1})}>num2+1</button>        </>    );}export default Test

Hook怎么在React中使用

可以看到useState中setState是替换,不会合并,正确更新:

import { useState } from 'react'const Test = () => {    const [counts, setCounts] = useState({        num1: 0,        num2: 0    });    return (        <>            <h2>num1:{counts.num1}</h2>            <h2>num2:{counts.num2}</h2>            <button onClick={() => setCounts({ ...counts, num1: counts.num1 + 1})}>num1+1</button>            <button onClick={() => setCounts({ ...counts, num2: counts.num2 + 1})}>num2+1</button>        </>    );}export default Test

2、useEffect:副作用,取代生命周期

用法示例,在class组件中如果需要在组件挂载后和数据更新后做同一件事,我们会这样做:

componentDidMount() {    // 做一些事}componentDidUpdate() {    // 做一些事}

可以看出来,如果逻辑复杂后,代码看起来不优雅,且容易造成逻辑混乱,而使用useEffect:

useEffect(() => {    // 做一些事});

此刻已经看到了useEffect的基本用法,除此之外,他还可以绑定触发更新的依赖状态,默认是状态中任何数据发生变化副作用都会执行,如:

import { useState, useEffect } from 'react'const Test = () => {    const [count1, setCount1] = useState(0);    const [count2, setCount2] = useState(0);    useEffect(() => {        console.log('useEffect触发了')    });    return (        <>            <h2>count1:{count1}</h2>            <h2>count2:{count2}</h2>            <button onClick={() => setCount1(count1 + 1)}>count1+1</button>            <button onClick={() => setCount2(count2 + 1)}>count2+1</button>        </>    );}export default Test

Hook怎么在React中使用

将上述代码useEffect第二个参数传入需要绑定的状态,可绑定多个:

// 语法:useEffect(回调函数,[依赖值])useEffect(() => {    console.log('useEffect触发了')}, [count1]);

Hook怎么在React中使用

可以看到,只有绑定的count1发生变化才会触发,如果传空数组则任何状态发生变化都不会触发,此时useEffect的作用就类似class组件中的componentDidMount,所以发送请求通常也会在此执行。

清理副作用

在上面的操作中都不用清理的副作用,然而,有些副作用是需要去清理的,不清理会造成异常甚至内存泄漏,比如开启定时器,如果不清理,则会多次开启,从上面可以看到useEffect的第一个参数是一个回调函数,可以在回调函数中再返回一个函数,该函数可以在状态更新后第一个回调函数执行之前调用,具体实现:

useEffect(() => {    // 设置副作用    return () => {        // 清理副作用    }});

3、useContext:跨组件共享数据

React.createContext();创建一个TestContext对象
TestContext.Provider包裹子组件
数据放在<TestContext.Provider value={value}>的value中
子组件中通过useContext(TestContext)获取值

import React, { useContext, useState } from 'react';const TestContext = React.createContext();const Parent = () => {    const [value, setValue] = useState(0);    return (        <div>            {(() => console.log("Parent-render"))()}            <button onClick={() => setValue(value + 1)}>value + 1</button>            <TestContext.Provider value={value}>                <Child1 />                <Child2 />            </TestContext.Provider>        </div>    );}const Child1 = () => {    const value = useContext(TestContext);    return (        <div>            {(() => console.log('Child1-render'))()}            <h4>Child1-value: {value}</h4>        </div>    );}const Child2 = () => {    return (        <div>            {(() => console.log('Child2-render'))()}            <h4>Child2</h4>        </div>    );}export default Parent

Hook怎么在React中使用

至此数据实现共享了,但是可以看到在TestContext中的共享数据只要发生变化,子组件都会重新渲染,Child2并没有绑定数据,不希望他做无意义的渲染,可以使用React.memo解决,实现:

const Child2 = React.memo(() => {    return (        <div>            {(() => console.log('Child2-render'))()}            <h4>Child2</h4>        </div>    );});

Hook怎么在React中使用

4、useCallback:性能优化

语法:

// useCallback(回调函数,[依赖值])const handleClick = useCallback(()=> {    // 做一些事}, [value]);

useCallback返回的是一个 memoized(缓存)函数,在依赖不变的情况下,多次定义的时候,返回的值是相同的,他的实现原理是当使用一组参数初次调用函数时,会缓存参数和计算结果,当再次使用相同的参数调用该函数时,会直接返回相应的缓存结果。

优化性能例子:

import React, { useState, useCallback, memo } from 'react';const Parent = () => {    const [value1, setValue1] = useState(0);    const [value2, setValue2] = useState(0);    const handleClick1 = useCallback(()=> {        setValue1(value1 + 1);    }, [value1]);    const handleClick2 = useCallback(()=> {        setValue2(value2 + 1);    }, [value2]);    return (        <>            {(() => console.log("Parent-render"))()}            <h4>{value1}</h4>            <h4>{value2}</h4>            <Child1 handleClick1={handleClick1} />            <Child2 handleClick2={handleClick2} />        </>    );}const Child1 = memo(props => {    return (        <div>            {(() => console.log("Child1-render"))()}            <button onClick={() => props.handleClick1()}>value1 + 1</button>        </div>    );});const Child2 = memo(props => {    return (        <div>            {(() => console.log("Child2-render"))()}            <button onClick={() => props.handleClick2()}>value2 + 1</button>        </div>    );});export default Parent

Hook怎么在React中使用

useCallback返回的是一个memoized回调函数,仅在其中绑定的一个依赖项变化后才更改可防止不必要的渲染,在跨组件共享数据中举例的事件是在父组件中点击触发,而现在是使用状态提升,在父组件中传递方法供子组件调用,每次render时函数也会变化,导致子组件重新渲染,上面例子useCallback将函数进行包裹,依赖值未发生变化时会返回缓存的函数,配合React.memo即可优化无意义的渲染。

5、useMemo:性能优化

语法:

// useMemo(回调函数,[依赖值])useMemo(() => {    // 做一些事情},[value]);

先看一个例子:

import React, { useState } from 'react'const Test = ()=> {    const [value, setValue] = useState(0);    const [count, setCount] = useState(1);    const getDoubleCount = () => {        console.log('getDoubleCount进行计算了');        return count * 2;    };    return (        <div>            <h3>value: {value}</h3>            <h3>doubleCount: {getDoubleCount()}</h3>            <button onClick={() => setValue(value + 1)}>value+1</button>        </div>    )}export default Test

Hook怎么在React中使用

可以看到getDoubleCount依赖的是count,但value发生变化它也重新进行了计算渲染,现在只需要将getDoubleCount使用useMemo进行包裹,如下:

import React, { useState, useMemo } from 'react'const Test = ()=> {    const [value, setValue] = useState(0);    const [count, setCount] = useState(1);    const getDoubleCount = useMemo(() => {        console.log('getDoubleCount进行计算了');        return count * 2;    },[count]);    return (        <div>            <h3>value: {value}</h3>            <h3>doubleCount: {getDoubleCount}</h3>            <button onClick={() => setValue(value + 1)}>value+1</button>        </div>    )}export default Test

Hook怎么在React中使用

现在getDoubleCount只有依赖的count发生变化时才会重新计算渲染。

useMemo和useCallback的共同点:

  • 接收的参数都是一样的,第一个是回调函数,第二个是依赖的数据

  • 它们都是当依赖的数据发生变化时才会重新计算结果,起到了缓存作用

useMemo和useCallback的区别:

  • useMemo计算结果是return回来的值,通常用于缓存计算结果的值

  • useCallback计算结果是一个函数,通常用于缓存函数

useRef用法:例如要实现点击button按钮使input输入框获得焦点:

import React, { useState, useMemo } from 'react'const Test = ()=> {    const [value, setValue] = useState(0);    const [count, setCount] = useState(1);    const getDoubleCount = useMemo(() => {        console.log('getDoubleCount进行计算了');        return count * 2;    },[count]);    return (        <div>            <h3>value: {value}</h3>            <h3>doubleCount: {getDoubleCount}</h3>            <button onClick={() => setValue(value + 1)}>value+1</button>        </div>    )}export default Test

这样看起来非常像React.createRef(),将上面代码中的useRef()改成React.createRef()也能实现同样的效果,那为什么要设计一个新的hook?难道只是会了加上use,统一hook规范?
事实上,它们确实不一样。

官网的说明如下:

useRef returns a mutable ref object whose .current property is initialized to the passed
argument (initialValue). The returned object will persist for the full lifetime of the component.

翻译

Hook怎么在React中使用

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: Hook怎么在React中使用

本文链接: https://www.lsjlt.com/news/275385.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Hook怎么在React中使用
    Hook怎么在React中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、useState:让函数式组件拥有状态用法示例:// 计数器impor...
    99+
    2023-06-14
  • hook如何在react中使用
    今天就跟大家聊聊有关hook如何在react中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、什么是hook?react hook是react 16.8推出的方法,能够让函数式...
    99+
    2023-06-14
  • React Hook中如何使用State Hook
    今天小编给大家分享一下React Hook中如何使用State Hook的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起...
    99+
    2023-06-29
  • React Hook之使用State Hook的方法
    目录等价的class示例Hook和函数组件Hook是什么?声明State变量读取State更新State小结提示:方括号有什么用?提示:使用多个state变量总结Hook 简介章节中...
    99+
    2024-04-02
  • React Hook的使用示例
    目录一个简单的组件案例 更复杂的父子组件案例 如何写onSelectReact.ChildrenReact.cloneElement父组件数据如何传递给子组件index数据...
    99+
    2024-04-02
  • React中10种Hook的使用介绍
    目录React Hook是什么? React目前提供的Hook 1.useState 2.useEffect & useLayoutEffect 3.useMemo &...
    99+
    2024-04-02
  • react中使用hook有哪些好处
    今天小编给大家分享一下react中使用hook有哪些好处的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来...
    99+
    2024-04-02
  • react中常见hook的使用方式
    目录1、什么是hook? 2、为什么要出现hook? 3、有哪些常用的hook? (1) useState (2) useEffect (3) useContext (4) useR...
    99+
    2024-04-02
  • React中10种Hook的使用方法
    本篇文章给大家分享的是有关React中10种Hook的使用方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。React Hook是什么?React官网是这么介绍的: Hook ...
    99+
    2023-06-25
  • React Hook中useEffecfa函数如何使用
    这篇文章主要介绍“React Hook中useEffecfa函数如何使用”,在日常操作中,相信很多人在React Hook中useEffecfa函数如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Rea...
    99+
    2023-07-04
  • 浅析React Hook中useEffecfa函数的使用
    我们知道在类组件中是可以有生命周期函数的, 那么如何在函数组件中定义类似于生命周期这些函数呢Effect Hook 可以让你来完成一些类似于class中生命周期的功能;事实上,类似于网络请求、手动更新DOM、一些事件的监听,都是React更...
    99+
    2022-11-22
    React Hook React
  • React Hook中的useEffecfa函数的使用小结
    目录useEffect的详细解析useEffecf基本使用清除副作用(Effect)使用多个useEffectuseEffect性能优化useEffect的详细解析 useEffec...
    99+
    2022-11-13
    React Hook  useEffecfa函数 React Hook用法 React useEffecfa函数
  • React中hook函数与useState及useEffect的使用
    目录1. 简介2. useState使用3. useEffect使用useEffect发起网络请求1. 简介 在 React 的世界中,有容器组件和 UI 组件之分,在 React ...
    99+
    2024-04-02
  • React中常用的两个Hook是什么
    这篇文章给大家分享的是有关React中常用的两个Hook是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。先介绍一下什么是hookHook是React 16.8新增的特性,专门...
    99+
    2024-04-02
  • hooks怎么在react中使用
    hooks怎么在react中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。State Hooks案例:import { useState }&...
    99+
    2023-06-14
  • props怎么在react中使用
    这篇文章给大家介绍props怎么在react中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。组件的props( props是一个对象 )作用:接收传递给组件的数据特点:可以给组件传递任意类型的数据props是只读的...
    99+
    2023-06-14
  • 怎么在React中使用Hooks
    这篇文章给大家介绍怎么在React中使用Hooks,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、State Hook1、基础用法function State(){  const&nbs...
    99+
    2023-06-14
  • vue2中的@hook怎么使用
    这篇文章主要讲解了“vue2中的@hook怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue2中的@hook怎么使用”吧!前言@hook是什么?用来监听组件生命周期的回调函数。这和...
    99+
    2023-07-05
  • react中hook的概念是什么
    本文小编为大家详细介绍“react中hook的概念是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“react中hook的概念是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识...
    99+
    2024-04-02
  • React中常用的Hook有哪些
    目录一、简介二、使用1、State Hook2、Effect Hook3、Ref Hook一、简介 Hook是React 16.8.0版本增加的新特性/新语法 可以在函数组件中使用 ...
    99+
    2023-01-10
    React Hook原理 React Hook有哪些
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作