zoukankan      html  css  js  c++  java
  • React Hooks之useState与useEffect

    一 useState状态管理https://www.jianshu.com/p/700777ea9db0

      1 useState(initialState)的第一个参数是初始状态。返回的数组有两项:当前状态和状态更新函数。

      2 useState一般用于简单的状态管理;复杂的可以使用useReducer;

      3 自定义Hooks: 适用场景:在两个函数之间共享逻辑时,我们会把它提取到第三个函数中。而组件和 Hook 都是函数,所以也同样适用这种方式。https://zh-hans.reactjs.org/docs/hooks-custom.html

     1 import React, { useState, useEffect, memo, useMemo, createContext, useRef, useContext } from 'react'
     2 
     3 // 自定义Hooks需要以use开头
     4 const useToggle = (initial) => {
     5   const [on, setOn] = useState(initial);
     6   const handleOn = (value) => {
     7     console.log(value);
     8     setOn(value)
     9   }
    10   return [on, handleOn]
    11 }
    12 
    13 function App () {
    14   const [on, setOn] = useToggle(false);
    15   const lightSwitch = () => setOn(!on);
    16   return (
    17     <>
    18       <div className="bulbs">{on?'开':'关'}</div>
    19       <button onClick={lightSwitch}>开/关</button>
    20     </>
    21   );
    22 }
    23 
    24 export default App
    View Code

      4 状态延迟初始化:

    • 每当 React 重新渲染组件时,都会执行useState(initialState)。 如果初始状态是原始值(数字,布尔值等),则不会有性能问题。
    • 当初始状态需要昂贵的性能方面的操作时,可以通过为useState(computeInitialState)提供一个函数来使用状态的延迟初始化。
    • getInitialState()仅在初始渲染时执行一次,以获得初始状态。在以后的组件渲染中,不会再调用getInitialState(),从而跳过昂贵的操作
     

     二 useEffect:

    1. 清除effect: useEffect()允许返回一个函数,在组件卸载时,执行该函数,清理副效应。如果不需要清理副效应,useEffect()就不用返回任何值。
    2. effect执行时机:默认情况下,它在第一次渲染之后和每次更新之后都会执行;React 保证了每次运行 effect 的同时,DOM 都已经更新完毕。(useEffect Hook 可看做 componentDidMountcomponentDidUpdate 和 componentWillUnmount 这三个函数的组合。)
    3. effect执行条件:可以给 useEffect 传递第二个参数,它是 effect 所依赖的值数组;
    4. useEffect是异步的,useLayoutEffect是同步的,异(同)步是相对于浏览器执行刷新屏幕Task来说;

    推荐阅读:

    类和钩子函数的理解:https://www.ruanyifeng.com/blog/2020/09/react-hooks-useeffect-tutorial.html

    useEffect与useLayoutEffect区别:https://www.cnblogs.com/fulu/p/13470126.html

  • 相关阅读:
    1,Window安装Docker
    字符串编码
    hive自带derby数据库初始化
    numpy深浅复制
    matplotlib基础学习
    pandas基础学习
    numpy基础学习
    pandas之join、merge
    pandas之索引
    pandas之时间戳
  • 原文地址:https://www.cnblogs.com/terrymin/p/15021391.html
Copyright © 2011-2022 走看看