React中常用的Hook有哪些

目录
  • 一、简介
  • 二、使用
    • 1、State Hook
    • 2、Effect Hook
    • 3、Ref Hook

一、简介

Hook是React 16.8.0版本增加的新特性/新语法

可以在函数组件中使用 state 以及其他的 React 特性

二、使用

1、State Hook

(1)State Hook让函数组件也可以有state状态, 并进行状态数据的读写操作

(2)语法: const [xxx, setXxx] = React.useState(initValue)

(3)useState()说明:

参数: 第一次初始化指定的值在内部作缓存
返回值: 包含2个元素的数组, 第1个为内部当前状态值, 第2个为更新状态值的函数

(4)setXxx()2种写法:

setXxx(newValue): 参数为非函数值, 直接指定新的状态值, 内部用其覆盖原来的状态值
setXxx(value => newValue): 参数为函数, 接收原本的状态值, 返回新的状态值, 内部用其覆盖原来的状态值

用类式组件如下:

export default class Demo extends Component {
	state = {count:0}
	add = () => {
		this.setState(state => ({count: state.count + 1}))
	}
	render() {
		return (
			<div>
				<h2>当前求和为:{this.state.count}</h2>
				<button onClick={this.add}>点我加1</button>
			</div>
		)
	}
}

用函数式组件如下:

export default function Demo() {
	const [count,setCount] = React.useState(0)
	// 其他状态也要用同样的方法
	const [name,setName] = React.useState('Jack')
	function add() {
		// 写法一
		// setCount(count + 1)
		// 写法二
		setCount(count => count + 1)
	}
	return (
		<div>
			<h2>当前求和为:{this.state.count}</h2>
			<button onClick={add}>点我加1</button>
		</div>
	)
}

Demo函数调用1+n次,每次调用const [count,setCount] = React.useState(0)都会执行,理论上count的值一直都是0,但实际上每次点击按钮count的值都会加1。那是因为React底层做了处理,第一次调用的时候就把count的值存下来了,后续再调用函数的时候不会因为传入的是0把原来的值给覆盖掉。

2、Effect Hook

(1)Effect Hook 可以让你在函数组件中执行副作用操作(用于模拟类组件中的生命周期钩子)

(2)React中的副作用操作:

发ajax请求数据获取
设置订阅 / 启动定时器
手动更改真实DOM

(3)语法和说明:

useEffect(() => {
    // 在此可以执行任何带副作用操作
    return () => { // 在组件卸载前执行
      // 在此做一些收尾工作, 比如清除定时器/取消订阅等
    }
}, [stateValue]) // 如果指定的是[], 回调函数只会在第一次render()后执行

(4)可以把 useEffect Hook 看做如下三个函数的组合

componentDidMount()
componentDidUpdate()
componentWillUnmount()

用类式组件如下:

export default class Demo extends Component {
	state = {count:0}
	add = () => {
		this.setState(state => ({count: state.count + 1}))
	}
	unmount = () => {
		ReactDOM.unmountComponentAtNode(document.getElementById('root'))
	}
	componentDidMount() {
		this.timer = setInterval(() => {
			this.setState(state => ({count:state.count + 1}))
		},1000)
	}
	componentWillUnmount(){
		clearInterval(this.timer)
	}
	render() {
		return (
			<div>
				<h2>当前求和为:{this.state.count}</h2>
				<button onClick={this.add}>点我加1</button>
				<button onClick={this.unmount}>卸载组件</button>
			</div>
		)
	}
}

用函数式组件如下:

export default function Demo() {
	const [count,setCount] = React.useState(0)
	React.useEffect(() => {
		let timer = setInterval(() => {
			setCount(count=> count + 1)
		},1000)
		return () => {
			clearInterval(timer)
		}
	},[])
	function add() {
		setCount(count => count + 1)
	}
	function unmount() {
		ReactDOM.unmountComponentAtNode(document.getElementById('root'))
	}
	return (
		<div>
			<h2>当前求和为:{this.state.count}</h2>
			<button onClick={add}>点我加1</button>
			<button onClick={unmount}>卸载组件</button>
		</div>
	)
}

(1)React.useEffect(() => {}),如果第二个参数没有写,会监测所有的状态,初始化以及每个状态变化的时候都会调用,相当于componentDidMountcomponentDidUpdate

(2)React.useEffect(() => {},[]),如果第二个参数是空数组,所有的状态都不会监测,执行1次(初始化),相当于componentDidMount

(3)React.useEffect(() => {},[count]),监测count值,执行1+n次(初始化以及count值变化的时候)

(4)React.useEffect(() => {})中返回一个函数,相当于componentWillUnmount

3、Ref Hook

(1)Ref Hook可以在函数组件中存储/查找组件内的标签或任意其它数据

(2)语法: const refContainer = useRef()

(3)作用:保存标签对象,功能与React.createRef()一样

用类式组件如下:

export default class Demo extends Component {
	myRef = React.createRef()
	show = ()=>{
		alert(this.myRef.current.value)
	}
	render() {
		return (
			<div>
				<input type="text" ref={this.myRef}/>
				<button onClick={this.show }>点击提示数据</button>
			</div>
		)
	}
}

用函数式组件如下:

export default class Demo extends Component {
	const myRef = React.useRef()
	function show() {
		alert(myRef.current.value)
	}
	render() {
		return (
			<div>
				<input type="text" ref={myRef}/>
				<button onClick={show }>点击提示数据</button>
			</div>
		)
	}
}

到此这篇关于React中常用的Hook有哪些的文章就介绍到这了,更多相关React Hook内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • React Hooks核心原理深入分析讲解

    目录 Hooks 闭包 开始动手实现 将useState应用到组件中 过期闭包 模块模式 实现useEffect 支持多个Hooks Custom Hooks 重新理解Hooks规则 React Hooks已经推出一段时间,大家应该比较熟悉,或者多多少少在项目中用过.写这篇文章简单分析一下Hooks的原理,并带大家实现一个简易版的Hooks. 这篇写的比较细,相关的知识点都会解释,给大家刷新一下记忆. Hooks Hooks是React 16.8推出的新功能.以这种更简单的方式进行逻辑复用.之前

  • React Hook - 自定义Hook的基本使用和案例讲解

    目录 自定义Hook 自定义Hook基本使用 自定义Hook案例练习 获取Context数据 获取窗口滚轮数据 自定义Hook 自定义Hook基本使用 自定义Hook本质上只是一种函数代码逻辑的抽取,严格意义上来说,它本身并不算React的特性. 例如有这样一个需求: 所有的组件在创建和销毁时都进行打印 组件被创建: 打印组件被创建了; 组件被销毁: 打印组件被销毁了; 如果每个组件我们都单独编写是非常繁琐的, 并且有许多重复代码; 我们可以将实现这样逻辑相同的代码抽离为一个自定义的Hook i

  • React-Hook中使用useEffect清除定时器的实现方法

    目录 useEffect useEffect清除定时器 最后 useEffect 之前我们学习了class组件的声明周期,那么我们想在函数式组件中做一些声明周期有关操作能否实现呢?函数式组件中是没有生命周期的,所以就可以使用useEffect来替代.我们可以把useEffect看作组件加载.组件更新.组件卸载的三个生命周期方法的组合. 下面我们一起来通过案例学习useEffect的使用:1.这里需求是写一个点击事件让state累加,并且吧state展示在title上2.首先要导入React, {

  • React Hooks - useContetx和useReducer的使用实例详解

    目录 useContetx的使用 useReducer的使用 useContetx的使用 在之前的开发中,我们要在组件中使用共享的Context有两种方式: 类组件可以通过 类名.contextType = MyContext 的方式,在类中获取context; 多个Context或者在函数式组件中通过 MyContext.Consumer 方式共享context; 但是多个Context共享时的方式会存在大量的嵌套(会导致代码阅读性非常差): Context Hook允许我们通过Hook来直接

  • React中常用的Hook有哪些

    目录 一.简介 二.使用 1.State Hook 2.Effect Hook 3.Ref Hook 一.简介 Hook是React 16.8.0版本增加的新特性/新语法 可以在函数组件中使用 state 以及其他的 React 特性 二.使用 1.State Hook (1)State Hook让函数组件也可以有state状态, 并进行状态数据的读写操作 (2)语法: const [xxx, setXxx] = React.useState(initValue) (3)useState()说明

  • React中10种Hook的使用介绍

    目录 React Hook是什么? React目前提供的Hook 1.useState 2.useEffect & useLayoutEffect 3.useMemo & useCallback 4.useRef 5.useContext 6.useReducer React Hook是什么? React官网是这么介绍的: Hook 是 React 16.8 的新增特性.它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性. 完全可选的 你无需重写任何已有

  • react中hook介绍以及使用教程

    前言 最近由于公司的项目开发,就学习了在react关于hook的使用,对其有个基本的认识以及如何在项目中去应用hook.在这篇博客中主要从以下的几个点进行介绍: hook简介 hook中常用api的使用 hook在使用过程中需要去注意的地方 hook中怎样去实现class组件中的声明周期函数 hook 首先介绍关于hook的含义,以及其所要去面对的一些场景 含义:Hook 是 React 16.8 的新增特性.它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性

  • react中常见hook的使用方式

    1.什么是hook? react hook是react 16.8推出的方法,能够让函数式组件像类式组件一样拥有state.ref.生命周期等属性. 2.为什么要出现hook? 函数式组件是全局当中一个普通函数,在非严格模式下this指向window,但是react内部开启了严格模式,此时this指向undefined,无法像类式组件一样使用state.ref,函数式组件定义的变量都是局部的,当组件进行更新时会重新定义,也无法存储,所以在hook出现之前,函数式组件有很大的局限性,通常情况下都会使

  • React中hook函数与useState及useEffect的使用

    目录 1. 简介 2. useState使用 3. useEffect使用 useEffect发起网络请求 1. 简介 在 React 的世界中,有容器组件和 UI 组件之分,在 React Hooks 出现之前,UI 组件我们可以使用函数组件,无状态组件来展示 UI,而对于容器组件,函数组件就显得无能为力,我们依赖于类组件来获取数据,处理数据,并向下传递参数给 UI 组件进行渲染.React在v16.8 的版本中推出了 React Hooks 新特性,Hook是一套工具函数的集合,它增强了函数

  • React Hooks常用场景的使用(小结)

    前言 React 在 v16.8 的版本中推出了 React Hooks 新特性.在我看来,使用 React Hooks 相比于从前的类组件有以下几点好处: 代码可读性更强,原本同一块功能的代码逻辑被拆分在了不同的生命周期函数中,容易使开发者不利于维护和迭代,通过 React Hooks 可以将功能代码聚合,方便阅读维护: 组件树层级变浅,在原本的代码中,我们经常使用 HOC/render props 等方式来复用组件的状态,增强功能等,无疑增加了组件树层数及渲染,而在 React Hooks

  • react中使用useEffect及踩坑记录

    目录 使用useEffect及踩坑记录 useEffect 介绍 useEffect常见跳坑 hooks中useEffect()使用总结 常见使用 useEffect() 的第二个参数说明 useEffect() 第一个函数参数的返回值 useEffect() 的注意点 使用useEffect及踩坑记录 useEffect 介绍 useEffect时reactHook中最重要,最常用的hook之一. useEffect相当于react中的什么生命周期呢? 这个问题在react官网中有过介绍,在使

  • 简单谈谈React中的路由系统

    React中的路由系统 提起路由,首先想到的就是 ASPNET MVC 里面的路由系统--通过事先定义一组路由规则,程序运行时就能自动根据我们输入的URL来返回相对应的页面.前端中的路由与之类似,前端中的路由是根据你定义的路由规则来渲染不同的页面/组件,同时也会更新地址栏的URL.本篇文章要介绍的是React中经常使用到的路由,react-router主要使用HTML5的history API来同步你的UI和URL. react-router的最新版本是v4.1.1,由于4.0版本和之间的版本A

  • es6在react中的应用代码解析

    不论是React还是React-native,facebook官方都推荐使用ES6的语法,没在项目中使用过的话,突然转换过来会遇到一些问题,如果还没有时间系统的学习下ES6那么注意一些常见的写法暂时也就够用的,这会给我们的开发带来很大的便捷,你会体验到ES6语法的无比简洁.下面给大家介绍es6在react中的应用,具体内容如下所示: import React,{Component} from 'react'; class RepeatArrayextends Component{ constru

  • 关于react中组件通信的几种方式详解

    前言 刚入门React可能会因为React的单向数据流的特性而遇到组件间沟通的麻烦,下面这篇文章就来给大家详细介绍下,在开始之前先来看一张图: react组件通信 需要组件之进行通信的几种情况 父组件向子组件通信 子组件向父组件通信 跨级组件通信 没有嵌套关系组件之间的通信 1. 父组件向子组件通信 React数据流动是单向的,父组件向子组件通信也是最常见的;父组件通过props向子组件传递需要的信息 Child.jsx import React from 'react'; import Pro

随机推荐