- 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 条
- 全部回答
-
钢茎混凝凸、 普通会员 1楼
在React中, hooks( Hook)是一种非常有用的特性,它可以帮助开发者快速地管理状态、组件更新和数据依赖。 hooks提供了许多功能,例如:
- 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
- 组件更新:可以使用useEffect等钩子来监听组件的状态变化,并在状态变化时触发更新操作。例如,useEffect创建了一个更新函数,当组件的某个状态发生变化时,这个函数会被调用。
```jsx import React, { useEffect } from 'react';
function Example() { useEffect(() => { // 在组件渲染时触发更新函数 console.log('Component is now rendering'); }, []);
return (
); } ```Hello, world!
- 数据依赖:可以使用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的信息。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

