IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> React hooks知识总结 -> 正文阅读

[JavaScript知识库]React hooks知识总结

使用React 你永远避不开的就是hooks?

?Hook 概览 – React 这里是官方介绍 下面 我会按照自己的理解与总结 介绍Hooks

Hooks
按照官方说法 ?Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。

主要作用 :为函数组件提供状态、生命周期等原本 在Class 组件中才提供的功能

注意点 :?

Hooks 只能在函数组件中使用

可以理解为通过 Hooks 为函数组件钩入 class 组件的特性

hooks的使用策略:

react没有计划从React中移除class

Hook 和现有代码可以同时工作,你可以渐进式地使用:

不推荐直接使用 Hooks 大规模重构现有组件

推荐新功能用 Hooks,复杂功能实现不了的,也可以继续用 class

找一个功能简单、非核心功能的组件开始使用 hooks

class 组件相关的 API 在hooks中可以不用

state与setState

钩子函数,componentDidMount、componentDidUpdate、componentWillUnmount

`this 相关的法

Hooks之useState
作用:能够使用useState为函数组件提供状态
步骤 :?
1 导入 useState 函数

import { useState } from 'react'

?2?调用?useState?函数,传入初始值,返回状态修改状态的函数

const [state, setState] = useState(数据类型)

? 3 使用

  1. 在 JSX 中展示状态

  2. 特定的时机调用修改状态的函数来改状态

return (
    <div>
      {/* 展示状态值 */}
      <h1>useState Hook -> {state}</h1>
      {/* 点击按钮,让状态值 +1 */}
      <button onClick={() => setState(state + 1)}>+1</button>
    </div>
  )

注意:?
1 状态初始值 此处的状态可以是任意值(比如,数值、字符串等),而 class 组件中的 state 必须是对象

2 返回值: 数组,包含两个值:1 状态值(state) 2 修改该状态的函数(setState)

?useState 两种格式
格式1:传入值

useState(0) useState('abc')

会存在合并问题

格式2:传入回调

useState((上一次的值 ) => { return 新值 })

回调函数的返回值就是状态的当前值

回调函数只会触发一次

必须要有返回值!!!

?状态更新:

整个组件的逻辑重新运行一次

useState只会在组件第一次渲染时使用状态的初值,随后都会使用状态的最新值

Hooks之useEffect 副作用
理解: 事物的主要作用之外的,就是副作用。

对于react组件来说,除了渲染UI之外的其他操作,都可以称之为副作用。

作用:?
数据(Ajax)请求、手动修改 DOM、开启定时器,清空定时器,添加事件监听,删除事件, localStorage 操作等

useEffect的依赖项:
useEffect有两个参数:

参数1: 副作用函数。

参数2:执行副作用函数的依赖项:它决定了什么时机执行参数1(副作用函数)

情况1:不带第二个参数。执行时机:每次更新之后都要执行?

组件挂载时相当于 componentDidMount

组件更新相当于componentDidUpdate
?


import React, { useEffect } from 'react' //导入
useEffect(() => {
  // 副作用函数的内容
})

情况2:带第二个参数,参数是空数组。执行时机:只执行第一次 ??

组件挂载相当于componentDidMount??组件更新不执行


useEffect(() => {
  // 副作用函数的内容
}, [])

情况3:带第二个参数(数组格式),并指定了依赖项。执行时机:(1)初始执行一次 (2)依赖项的值变化了,执行一次


useEffect(() => {
  // 副作用函数的内容
}, [依赖项1,依赖项2,....])

情况4:?第一个参数返回一个函数 俗称清理函数用来清理副作用?

  • 清理函数在组件卸载时以及下一次副作用函数调用之前执行

  • 相当于componentWillUnmount


useEffect(() => {
  
  return () => {
  	// 副作用函数的清理函数,模拟 componentWillUnMount
  }
  
}, [])

?Hooks之useRef-操作DOM
理解
?useRef 返回一个可变的 ref 对象,其 .current 属性被初始化为传入的参数?
? 返回的 ref 对象在组件的整个生命周期内持续存在。
? useRef 会在每次渲染时返回同一个 ref 对象
变更 .current 属性不会引发组件重新渲染
简单理解 useRef 就像是可以在其 .current 属性中保存一个可变值的“盒子”。
?


import React, { useRef } from 'react' //导入
const inputRef = useRef(null)

使用场景 俩种情况

第一种 获取dom 操作dom 或者组件

第二种 存储数据

Hooks之 useContext-全局状态

使用步骤

1 导入并调用createContext方法,得到Context对象,导出


import { createContext } from 'react'
export const Context = createContext()

2?使用?Provider?组件包裹根组件,并通过?value?属性提供要共享的数据

return (
  <Context.Provider value={ 这里放要传递的数据 }>
  	<根组件的内容/>
  </Context.Provider>
)

3?在任意后代组件中,如果希望获取公共数据:

导入useContext;调用useContext(第一步中导出的context) 得到value的值


import React, { useContext } from 'react'
import { Context } from './index'
const 函数组件 = () => {
    const 公共数据 = useContext(Context)
    return ( 函数组件的内容 )
}

Hooks之自定义hooks
作用:自定义 Hooks 针对不同组件实现不同状态逻辑复用

限制:

自定义 Hooks 是一个函数,约定函数名称必须以 use 开头,React 就是通过函数名称是否以 use 开头来判断是不是 Hooks

Hooks 只能在函数组件中或其他自定义 Hooks 中使用,否则,会报错!

自定义 Hooks 用来提取组件的状态逻辑,根据不同功能可以有不同的参数和返回值(就像使用普通函数一样)

使用场景
将组件状态逻辑提取到可重用的函数(自定义 Hooks)中,实现状态逻辑复用。

Hooks自定义算是比较一种高阶的写法 有空 我在整理一些实际开发中 可以封装的hooks?

对于想要深入了解的伙伴 下面链接中深入了解学习

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-17 12:40:05  更:2021-11-17 12:40:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/10 7:51:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码