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

  • 相关阅读:
    在SQLite中使用索引优化查询速度
    SQLite支持的SQL数据操作
    left (outer) join , right (outer) join, full (outer) join, (inner) join, cross join 区别
    深入理解Android内存管理原理(六)
    Merge Sorted Array
    Sort Colors
    Construct Binary Tree from Preorder and Inorder Traversal
    Binary Tree Postorder Traversal
    Symmetric Tree
    Rotate Image
  • 原文地址:https://www.cnblogs.com/terrymin/p/15021391.html
Copyright © 2011-2022 走看看