React-hooks 基本API

226 阅读1分钟

useState

useState 使函数组件也有了状态,并能对状态进行读写操作。

语法:

const [xxx, setXxx] = React.useState(initVal)

参数:第一次初始化指定的值会在内部做缓存

返回值是两个元素的数组,第一个是内部的当前状态,第二个是更新状态的函数

setXxx() 的两种写法:

  • set(newVal)

  • set(val => newVal)

useEffect

用于在函数组件中执行副作用(用于模拟类组件中的生命周期)

副作用操作:

  • 发送ajax请求
  • 设置订阅 、 启动定时器
  • 手动更改真实dom

语法:

useEffect(() => {
    
    return () => {
      
    }
  }, [])

第一个参数:

  • 处理副作用函数

  • 有return 函数返回时:模仿的是componentWillUnmount

第二个参数

  • 当第二个参数不传时,模仿的componentDidUpdatecomponentDidMount

  • 第二个参数传的是有值的数组 模仿的是 componentDidUpdate

使用:

import { useState, useEffect } from "react"
import ReactDOM from 'react-dom'

function Effect() {
  const [count, setCount] = useState(0)

  useEffect(() => {
    const timer = setInterval(() => {
      setCount(count+1)
    }, 1000);
    return () => {
      clearInterval(timer)
    }
  }, [count])

  const unmount = () => {
    ReactDOM.unmountComponentAtNode(document.getElementById('root'))
  }

  return (
    <>
      <h2>计时器{count}</h2>
      <button onClick={unmount}>销毁组件</button>
    </>
  )
}

export default Effect

useRef

与类组件中的 React.createRef() 相似

import { useRef } from "react"

function MyRef() {
  const myRef = useRef()

  const handleSubmit = () => {
    console.log(myRef.current.value);
  }

  return (
    <>
      <input type="text" ref={myRef} />
      <button onClick={handleSubmit}>获取表单数据</button>
    </>
  )
}

export default MyRef