react|useState的异步渲染

useState

  • 组件里面的变量可以用state来表示,setState函数是用来更新state的值的
  • 用法
javascript 复制代码
let [age,setAge]=useState(0); // 0是变量age的初始值

异步渲染

  • setState是异步指定的。也就是setAge是异步执行的。
  • 执行但不是立刻渲染,而是进入到微任务队列。注意分清执行和渲染是两回事。
javascript 复制代码
function App() {
    let [age, setAge] = useState(0);
    useEffect(()=>{
        console.log("use effect:", age);
    })
    let addAge = () => {
        setTimeout(()=>{
            console.log("i am macro task");
        },)
        Promise.resolve().then(()=>{
            console.log("i am micro task ");
        })
        setAge(()=>{
            console.log("where am i ");
            return 10;
        });
        console.log("main task");
    };
    return (
        <div>
            i am {age} years old
            <button onClick={addAge}>add </button>
        </div>

    );
}

export default App;

分析代码和输出

点击按钮,触发addAge函数。

  • setTimout进入宏任务队列,then进入微任务队列,setAge异步执行,返回10,也就是告诉react,下次把age渲染成10,所以如果在console.log("main task")上加一行,console.log(age),输出的还是10。
  • 从useEffect的输出顺序来看,大胆猜测react的渲染事件就是进入的微任务队列。因为,use effect:10 在"macro task" 前输出。
相关推荐
AlienZHOU7 小时前
AI Coding 时代下,我的技术面试实践分享
前端·后端·面试
Captaincc11 小时前
AI用量v0.1.11更新发布 新增 jusage doctor 诊断指令 托盘展示token 和余额 新增 AutoClaw 支持
前端·后端·vibecoding
计算机魔术师12 小时前
德国Wiki被黑后两周,OpenAI终于把模型失控的账本摊开了
前端
kyriewen13 小时前
我让 AI 当面试官面了我一轮:第 3 个追问我就卡住了(附 10 道追问清单)
前端·面试·ai编程
IT_陈寒13 小时前
Python的GIL把我坑惨了,多线程跑得比单线程还慢
前端·人工智能·后端
前端snow13 小时前
ai agent --- 多agent框架之图编排引擎-langgraph
前端
竹林81813 小时前
OmniPic Studio v3.2.1 核心技术架构与全平台发版解析文档
前端·浏览器
JamesZhang8007813 小时前
页面内存只涨不跌? 一次泄漏排查, 牵出 WeakMap 的诞生
前端
Z小明13 小时前
第 6 章 组件进阶
前端·vue.js
江华森13 小时前
HTTP请求的完整过程详解:从DNS解析到TCP挥手的微秒级实战分析
前端