React Hooks的使用

一个简单的例子 

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

const App = (props) => {
    let [ num, setDate ] = useState(0)
    return (
        
) } export default App

点击button调用定义的setDate函数,传递一个值,就能改变num的值,并且使得组件重新渲染,试图也会跟着改变。

增加useEffect的使用

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

const App = (props) => {
    let [ num, setDate ] = useState(0)
    useEffect(() => {
        console.log('component')
    })
    return (
        
) } export default App

刷新页面会发现打印了一次,这里相当于componentDidMount,点击按钮,每次点击都会打印,说明这个函数// Similar to componentDidUpdate。

给它传递第二个参数空数组

  useEffect(() => {
        console.log('component')
    },[])

发现只有第一次加载的时候会打印,这时相当于 componentDidMount函数

增加状态

不传递第二个参数的情况下,页面加载执行一次(componentDidMount),每个按钮点击都会触发副作用函数,相当于componentDidUpdate

 

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

const App = (props) => {
    let [ num, setDate ] = useState(0)
    let [ name, changeNmme ] = useState('麦乐')
    useEffect(() => {
        console.log('component')
    })
    return (
        
) } export default App

数组中加入了name,加载时调用一次(componentDidMount),,然后就只有当name改变时才会调用副作用函数。这就相当于componentShouldUpdate;

  useEffect(() => {
        console.log('component')
    },[name])

如果在一个函数中,同时该变两个状态,副作用函数只会执行一次。

import React, { useEffect, useState } from 'react'
 
const App = (props: any) => {
    let [num, setDate] = useState(0)
    let [name, changeNmme] = useState('麦乐')
    function handleClick() { 
        setDate(++num);
        changeNmme('maile')
    }
    useEffect(() => {
        console.log('component')
    })
    return (
        
) } export default App

 

有时我们还需要用到componentWillUnMound周期函数,用hooks可以这样处理

 useEffect(() => {
        console.log('component')
        return () => {
            console.log('status clear')
        }
    },[name])

返回一个函数,就会在组件销毁的时候调用返回的函数,可以在这里进行状态的清理。

不要在循环,条件或嵌套函数中调用 Hook, 确保总是在你的 React 函数的最顶层调用他们。

你可能感兴趣的:(react专题)