账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    react hook中的不理解
    40
    0

    useMutationEffect和useLayoutEffect的区别怎么这么不明显?有什么区别么?
    自己做实验`console.log('开始代码上的use')//1

      useEffect(() => {//6
        const btn = document.getElementById('btn')
        console.log(btn, btn.style.backgroundColor, btn.style.width, btn.style.color, 'useEffect')
      })
    
      //5和6之间出view
      useLayoutEffect(() => {//5
        const btn = document.getElementById('btn')
        console.log(btn, btn.style.backgroundColor, btn.style.width, btn.style.color, 'useLayoutEffect') 
      })
    
      useMutationEffect(() => {//4
        const btn = document.getElementById('btn')
        console.log(btn, btn.style.backgroundColor, btn.style.width, btn.style.color, 'useMutationEffect')
      })
      console.log('结束代码上的use')//2
      return (
        <div>
          {computed}
          <input type = 'text' value = { value } onChange = {(e) => setValue(e.target.value)} />
          <br />
          <input type = 'text' value = { name} onChange = {(e) => setName(e.target.value)}/>
          <Button onClick = { handleClick } style = {{ backgroundColor: 'red', width: '50px', color: color}} id = 'btn'/>
          {console.log('render')}{/* //3 */}
          
        </div>
      )
    }`

    发现除了顺序不同并没有明显区别?看来很多文档都是这样描述的:
    useMutationEffect
    api与useEffect相同,但在更新兄弟组件之前,它在React执行其DOM改变的同一阶段同步触发。使用它来执行自定义DOM改变。

    useLayoutEffect
    api与useEffect相同,但在所有DOM改变后同步触发。使用它来从DOM读取布局并同步重新渲染。在浏览器有机会绘制之前,将在useLayoutEffect内部计划的更新将同步刷新。

    然后就是这句:
    注意 避免在useMutationEffect中读取DOM。在读取计算样式或布局信息时,useLayoutEffect更合适。
    然后这篇文章:https://stackoverflow.com/que...;有什么通俗易懂的解释能说清楚的?或者是用代码直观的证明??

    0
    打赏
    收藏
    点击回答
        全部回答
    • 共 0 条
    • 钢茎混凝凸、 普通会员 1楼

      在React中, hooks( Hook)是一种非常有用的特性,它可以帮助开发者快速地管理状态、组件更新和数据依赖。 hooks提供了许多功能,例如:

      1. state管理:可以使用useState或useReducer等钩子来管理组件的状态。例如,useState创建了一个状态,当组件渲染时,这个状态会自动更新。

      ```jsx import React, { useState } from 'react';

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

      // 更新count状态的函数 const increment = () => setCount(count + 1);

      // 使用increment函数来更新count状态 return (

      You clicked {count} times

      ); } ```

      1. 组件更新:可以使用useEffect等钩子来监听组件的状态变化,并在状态变化时触发更新操作。例如,useEffect创建了一个更新函数,当组件的某个状态发生变化时,这个函数会被调用。

      ```jsx import React, { useEffect } from 'react';

      function Example() { useEffect(() => { // 在组件渲染时触发更新函数 console.log('Component is now rendering'); }, []);

      return (

      Hello, world!

      ); } ```

      1. 数据依赖:可以使用useRef等钩子来管理组件的状态和副作用(副作用是在运行时需要额外操作的副作用)。例如,useRef创建了一个引用,当组件的某个状态发生变化时,这个引用会被更新。

      ```jsx import React, { useRef } from 'react';

      function Example() { const countRef = useRef(null);

      // 在组件渲染时触发更新函数 useEffect(() => { // 在组件渲染时更新countRef引用 countRef.current++; console.log('Count:', countRef.current); }, []);

      return (

      Hello, world!

      You clicked {countRef.current} times

      ); } ```

      以上就是React hooks的一些基本用法,但还有很多其他的用法,例如useMemo、useEffect hook等。你可以在React官方文档中了解更多关于hooks的信息。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部