React Hooks的理解

简介: React Hooks的理解

Hooks是什么?

  1. Hooks就是让函数组件具有State和其他React特性的能力

为什么使用hooks?

  1. React有类组件和函数组件两种写法,在没有hooks之前,需要State的组件只能通过类组件实现存在组件之间复用状态逻辑,复杂组件臃肿,难以理解等问题

基础Hooks(useState,useEffect,useRef)的使用

  1. useState--当需要给函数组件添加state时,使用useState
import React,{useState} from 'react'
export default function Person() { 
    // 声明一个state count 
    const [count, setCount] = useState(0); 
    // 使用count进行渲染,并绑定点击时间,使count+1 
    return ( 
      <div> 
        <p>count:{count}</p> 
        <button onClick={() => setCount(count + 1)}> 
            点我加一
        </button> 
      </div> 
    ); 
  }

上述案例中 const [count, setCount] = useState(0),count代表变量名称,setCount代表修改变量的方法,useState(0)代表count初始值设置为0,当调用setCount方法之后会主动调用render进而刷新页面


2.useEffect--为组件添加副作用的操作(因为函数式组件没有生命周期相关概念,我们使用useEffect来实现类似生命周期的操作)


a.useEffect第一个参数接受一个回调函数,默认情况下,useEffect会在第一次渲染和更新之后都会执行,相当于在componentDidMount和componentDidUpdate两个生命周期函数中执行回调

import React,{useState,useEffect} from 'react'
export default function Person() { 
    // 声明一个state count 
    const [count, setCount] = useState(0); 
    // 使用count进行渲染,并绑定点击时间,使count+1 
    useEffect(()=>{
        console.log(count);
    })
    return ( 
      <div> 
        <p>count:{count}</p> 
        <button onClick={() => setCount(count + 1)}> 
            点我加一
        </button> 
      </div> 
    ); 
  }

d3699f7fbbe48877e272d1d0356e74c5.png

b.如果某些特定值在两次重渲染之间没有发生变化,这时候只需要传入第二个参数,React 将对前一次渲染的count和后一次渲染的count进行比较,如果是相等则跳过useEffect执行

import React,{useState,useEffect} from 'react'
export default function Person() { 
    // 声明一个state count 
    const [count, setCount] = useState(0); 
    // 使用count进行渲染,并绑定点击时间,使count+1 
    useEffect(()=>{
        console.log(count);
    },count)
    return ( 
      <div> 
        <p>count:{count}</p> 
        <button onClick={() => setCount(count + 1)}> 
            点我加一
        </button> 
      </div> 
    ); 
  }

c.回调函数中可以返回一个清除函数,这是effect可选的清除机制,相当于类组件中componentwillUnmount生命周期函数,可做一些清除副作用的操作

const [isOnline, setIsOnline] = useState(null); 
useEffect(() => { 
  function handleStatusChange(status) { 
    setIsOnline(status.isOnline); 
  } 
  ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange); 
  // 返回一个函数,在UnMount时进行清除 
  return () => { 
    ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange); 
  }; 
}, []); 

d.总结:useEffect相当于componentDidMount,componentDidUpdate 和 componentWillUnmount 这三个生命周期函数的组合

3.useRef--使用ref

import React, {  useRef } from 'react'
export default function Person() {
    const refOne = useRef()
    const getInput=()=>{
        console.log(refOne.current.value);
    }
    return (
        <div>
            <input type="text" ref={refOne} name="" id="" />
            <button onClick={() => getInput()}>
                点我获取输入框数据
            </button>
        </div>
    );
}

04c9b503bef47c5a4259bb3f215e42e4.png

目录
相关文章
|
1月前
|
前端开发 测试技术 开发工具
探索前端框架React Hooks的优势与应用
本文将深入探讨前端框架React Hooks的优势与应用。通过分析React Hooks的特性以及实际应用案例,帮助读者更好地理解和运用这一现代化的前端开发工具。
|
1月前
|
前端开发 JavaScript
react常用的hooks有哪些?
react常用的hooks有哪些?
41 0
|
5天前
|
缓存 前端开发 JavaScript
React Hooks 一步到位
React Hooks 一步到位
|
29天前
|
存储 前端开发 JavaScript
React Hooks 的替代方案有哪些?
【5月更文挑战第28天】React Hooks 的替代方案有哪些?
27 2
|
29天前
|
前端开发 JavaScript 开发者
React Hooks 的应用场景有哪些?
【5月更文挑战第28天】React Hooks 的应用场景有哪些?
16 1
|
29天前
|
前端开发 JavaScript 开发者
React Hooks 是在 React 16.8 版本中引入的一种新功能
【5月更文挑战第28天】React Hooks 是在 React 16.8 版本中引入的一种新功能
27 1
|
1月前
|
前端开发
React Hooks - useState 的使用方法和注意事项(1),web前端开发前景
React Hooks - useState 的使用方法和注意事项(1),web前端开发前景
|
1月前
|
前端开发
探索React Hooks:一种全新的组件逻辑管理方式
React Hooks是React 16.8版本引入的一项新功能,它改变了我们编写React组件的方式。本文将从Hooks的起源讲起,逐步分析Hooks的优势,并通过具体示例展示Hooks在组件逻辑管理中的应用,旨在帮助读者更好地理解和运用React Hooks。
|
1月前
|
前端开发 API 开发者
React Hooks API:自定义Hooks的创建与使用
【4月更文挑战第25天】本文介绍了React自定义Hooks的创建与使用。自定义Hooks是提升React开发效率的关键工具。
|
1月前
|
前端开发 JavaScript
React Hooks:让你轻松掌握函数组件的状态与管理
React Hooks:让你轻松掌握函数组件的状态与管理