日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

7 useLayoutEffect、useDebugValue

發布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 7 useLayoutEffect、useDebugValue 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

useEffect:dom完成渲染后執行

  • 不傳參數,每次都會執行
    傳空的依賴[],只會執行一次
    有依賴,依賴項變化會執行

useEffect實現動畫效果

import { useEffect, useRef, useState } from "react"const App = () => {const [, setCount] = useState({})const refDiv = useRef()useEffect(() => {console.log('執行useEffect')setTimeout(() => {refDiv.current.style.transform = 'translateX(150px)'refDiv.current.style.transition = 'all .9s'}, 1000)// 清理函數 要顯示返回的動畫,上面的函數應延遲一段執行// 否則太快回到150px位置,看不到效果return () => {console.log('執行清理函數')refDiv.current.style.transform = 'translateX(0px)'refDiv.current.style.transition = 'all .9s'}})const styleObj = {width: '50px',height: '50px',background: 'skyblue'}return (<><div style={styleObj} ref={refDiv}></div><button onClick={() => setCount({})}>click</button></>) } export default App

useLayoutEffect

  • 和componentDidMount 和 componentDidUpdate調用階段一致
import { useEffect, useLayoutEffect, useRef, useState } from "react"const App = () => {const [, setCount] = useState({})const refDiv = useRef()useLayoutEffect(() => {console.log('useLayoutEffect渲染前執行')// 若不延遲 在useLayoutEffect看不到移動,而是初始就在150的位置setTimeout(() => {refDiv.current.style.transform = 'translateX(150px)'refDiv.current.style.transition = 'all .9s'}, 1000)return () => {console.log('執行清理函數')refDiv.current.style.transform = 'translateX(0px)'refDiv.current.style.transition = 'all .9s'}})const styleObj = {width: '50px',height: '50px',background: 'skyblue'}return (<><div style={styleObj} ref={refDiv}></div><button onClick={() => setCount({})}>click</button></>) } export default App

useDebugValue

  • 用于在React開發者工具中顯示自定義hook的標簽

自定義hook

import { useEffect, useState } from 'react' // 自定義hook const useCount = params => {const [count, setCount] = useState(0)useEffect(() => {document.title = `${count}次點擊`})return [count, setCount] } const Foo = () => {const [count, setCount] = useCount(0)useEffect(() => {console.log('Foo useEffect')})return (<><h1>{count}</h1><button onClick={() => setCount(count + 1)}>click</button></>) } const App = () => {return <Foo /> } export default App

增加提示效果

總結

以上是生活随笔為你收集整理的7 useLayoutEffect、useDebugValue的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。