一个react的hooks的问题

发布于 2022-09-12 22:09:50 字数 105 浏览 21 评论 0

useEffect(() => {

console.log(666)

}, [a,b]}

a和b同时改变的话,666会打印两次,
这种情况怎么避免呢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浊酒尽余欢 2022-09-19 22:09:50

摘抄自另一个问题的回答:https://segmentfault.com/q/10...

import React, { useState, useEffect, useRef } from 'react';

const One = _ => {
  const [a, setA] = useState(0);
  const [b, setB] = useState(0);
  const ref = useRef({ a, b });

  useEffect(() => {
    let { a: prevA, b: prevB } = ref.current;
    console.log('更新前:', prevA, prevB);
    console.log('更新后:', a, b);
    
    //a 和 b 同时改变的时候不执行
    if (prevA !== a && prevB !== b) {
      return
    }
    console.log(666);
    ref.current = { a, b };
  }, [a, b]);

  return (
    <>
      <h1>{a + b}</h1>
      <button onClick={_ => setA(d => d + 1)}>Chang A</button>
      <button onClick={_ => setB(d => d + 1)}>Chang B</button>
    </>
  );
};

export default One;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文