react hook 异步任务转同步

简介: keywords: - react - flushSync

抛出问题

由于 react 的批处理,会合并为一次 render

function handleClick() {
  setLoading(true);
  setCount(1);
  setLoading(false);
}

解决问题

React 中的批处理简单来说就是将多个状态更新合并为一次重新渲染,以获得更好的性能。如果要一个请求的 loading 效果怎么实现呢?

方式一: 利用 Promise、setTimeout

function handleClick() {
  setTimeout(() => {
    setCount(2);
    setLoading(false);
  });
  setLoading(true);
}

方式二: 利用 await

async function handleClick() {
  setLoading(true);
  await setCount(2);
  setLoading(false);
}

方式三: 利用 react17 新出的 flushSync

flushSync 会以函数为作用域,函数内部的多个 setState 仍然为批量更新,这样可以精准控制哪些不需要的批量更新
import React, { useState } from 'react';
import { flushSync } from 'react-dom';

export default () => {
  const [count, setCount] = useState(1);
  const click = async () => {
    flushSync(() => setLoading(true));
    setCount(2);
    setLoading(false);
  };
  return <button onClick={click}> count </button>;
};
相关文章
|
3月前
|
Web App开发 前端开发 JavaScript
React 之 requestAnimationFrame 执行机制探索
React 之 requestAnimationFrame 执行机制探索
76 0
|
5月前
|
前端开发 JavaScript
React 中 setState 什么时候是同步的,什么时候是异步的
React 中 setState 什么时候是同步的,什么时候是异步的
55 0
|
7月前
|
前端开发 JavaScript
react的setState是异步还是同步
react的setState是异步还是同步
|
3月前
|
前端开发 算法
React中的setState执行机制?
React中的setState执行机制?
|
4月前
|
前端开发 JavaScript 算法
react中的setState的执行机制
react中的setState的执行机制
21 0
|
4月前
|
前端开发
react hook 生命周期
react hook 生命周期
33 0
|
8月前
|
前端开发 JavaScript
React中的setState的执行机制
React中的setState的执行机制
74 0
|
8月前
|
前端开发 JavaScript
React事件执行机制
React事件执行机制
54 0
|
8月前
|
前端开发
react中setState是同步还是异步
react中setState是同步还是异步
69 0
|
10月前
|
JavaScript 前端开发 API
深入理解Vue中的异步更新机制和$nextTick方法
在Vue开发中,我们经常会遇到需要在 DOM 更新完成后执行某些操作的情况。为了解决这个问题,Vue提供了`$nextTick`方法,它可以让我们在下次 DOM 更新完成后执行回调函数。本文将深入探讨Vue的异步更新机制、`$nextTick`的原理和使用场景,以及分别在 Vue2.x 与 Vue3.x 中的相同点和区别。
12473 48
深入理解Vue中的异步更新机制和$nextTick方法

热门文章

最新文章