基础hooks使用

66 阅读1分钟

Hook简介

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

useState()

import React, { useState } from 'react'

export default function App() {
   // 声明一个叫做 “num” 的 state 变量
   const [num, setNum] = useState(0);
   
   return (
       <div>
           <p> {num} </p>
           <button onClick={ () => setNum(num + 1) }>Click</button>
       </div>
   )

}

useState()的主要作用相当于class组件的state,useState函数相对来讲更像是单独针对每一个key去进行操控。

useEffect()

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

export default function App(){
    const [x,setX]=useState(0)

    useEffect(()=>{
        //模拟 componentDidmount
    },[])
    
    useEffect(()=>{
        //模拟 componentDidupdate
    },[x])
    
    useEffect(()=>{
        //模拟 componentWillUnmount
        return () => {
            
        }
    },[x])
    
    return (
        <div>App</div>
    )
}

useEffect()函数有两个参数,第一个参数为回调函数,第二个为它的依赖值,且它可以模拟三个react的生命周期,componentDidmount(加载完成)、componentDidupdate(数据更新)、componentWillUnmount(组件卸载)

useCallback()

  import React, { useCallback, useState } from 'react'

  const [count, setCount] = useState(0)

  const fn = useCallback(() => {
    console.log(count, 'count');
  }, [count]);

  const onClick = () => {
    setCount(count + 1);
  };


return ( 
    <>
        <h1>count:{count}</h1>
        <button onClick={onClick}>Click me!</button>
    </>
)

useCallback()为记忆函数,它可以防止因为组件重新渲染,导致方法被重新创建,起到缓存作用。

useMemo()

   import React, { useMemo, useState } from 'react'
   
   export default function App(){
       const [count, setCount] = useState(10000)
       
       // 监听count是否变化
       const fn = useMemo( () => {
           let num=0;
           for (let i = 0; i < count ;i++){
               num+=i
           }
           return num
       }, [count]) 
       
       // 点击改变count值
       const onClick = () => {
           setCount(count + 1)
       }
       
       return (
           <>
               <h1>{count}</h1>
               <Button onClick={onClick}>Click me!</Button>
           </>
       )
   }

useMemo()它是用来做缓存用的,只有当一个依赖项改变的时候才会发生变化,否则直接返回上一次缓存的值,就不用在每次渲染的时候再做计算