React框架-浅谈Hooks


一、Hooks简介

Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。

Hooks(只适用于函数式组件)
实际上就是一套API,它可以让无状态组件(函数式组件)拥有像类组件一样的特性
这些特性包括:state、生命周期、上下文、ref等等


二、为什么使用Hooks

Hook是向下兼容的,不包含任何破坏性改动。它解决了在组件之间复用状态逻辑很难的缺陷,可以使用 Hook 从组件中提取状态逻辑,使得这些逻辑可以单独测试并复用。Hook 使你在无需修改组件结构的情况下复用状态逻辑。 这使得在组件间或社区内共享 Hook 变得更便捷,并且性能更高。


三、使用 State Hook

1、useState

返回值为:当前 state 以及更新 state 的函数。

import React, { useState } from 'react';

function Example() {
	// 声明一个叫 “count” 的 state 变量
	const [count, setCount] = useState(0);
	//useState() 方法里面唯一的参数就是初始 state

声明了一个叫 count 的 state 变量,然后把它设为 0。React 会在重复渲染时记住它当前的值,并且提供最新的值给我们的函数。我们可以通过调用 setCount 来更新当前的 count。


四、使用 Effect Hook

1、useEffect

Effect Hook 可以让你在函数组件中执行副作用操作

import React,{useState,useEffect} from "react"

export default function TestHooks(props){
	//useState的语法
	const [count,setCount] = useState(100)
	const [bol,setBol] = useState(true)
	const [list,setList] = useState([])
	let timer = null
	
	function changeCount (){
		setCount(count+1)
	}
	
	//useEffect(fn,[])
	useEffect(()=>{
		//相当于是componentDidMount() 的功能
		//在这里可以调接口、开定时器、开长连接
		timer = setInterval(()=>{
			console.log(1)
		},1000)
		return ()=>{
			//相当于 componentWillUnmount() 的功能
			//在这里关闭定时器、关闭长连接
			clearInterval(timer)
		}
	},[count])
	//[count] 相当于componentDidUpdate() 的功能
	
	useEffect(()=>{
		//相当于是Vue中的mounted()
		setList([1,2,3,4])
		//return undefined 或者不写
	},[])
	
	//标准写法
	useEffect(()=>{
		document.title = "2006"
		//return undefined 或者不写
	})
	
	function createList(){
		return list.map(ele=>(
			<div key={ele}>{ele}</div>
		))
	}
	
	return(
		<div>
			<h1>测试Hooks</h1>
			<h3>{count}</h3>
			<button onClick={changeCount}>增加</button>
			<hr/>
			{
				createList()
			}
		</div>
	)
}

你可以把 useEffect Hook 看做 componentDidMount,componentDidUpdate 和 componentWillUnmount 这三个函数的组合。


2、useEffect的常见问题
2-1 为什么要在 effect 中返回一个函数?

这是 effect 可选的清除机制。每个 effect 都可以返回一个清除函数。如此可以将添加和移除订阅的逻辑放在一起。它们都属于effect 的一部分

2-2 React 何时清除 effect?

React 会在组件卸载的时候执行清除操作。effect 在每次渲染的时候都会执行。这就是为什么 React 会在执行当前 effect之前对上一个 effect 进行清除。

2-3 effect 中的是否必须要返回?

useEffect 可以在组件渲染后实现各种不同的副作用。有些副作用可能需要清除,所以需要返回一个函数,如果不需要清理,就不用返回

2-4 组件中可以包含多个useEffect

使用多个 Effect 实现关注点分离,也就是说组件中可以多个useEffect进行处理逻辑代码,按照不同的代码业务分离他们

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值