功能组件React - 更新一个状态会导致整个页面重新渲染
P粉180844619
P粉180844619 2023-08-17 14:19:48
[React讨论组]
<p>非常感谢您提前的帮助。 我不确定为什么当我在<code>loadDataFunction()</code>中更新<code>percentageDone</code>状态时,它会更新<code>RenderData1Component</code>,而实际上它不应该这样。它不应该只在data1改变时更新吗?</p> <p>我有这样一段代码。</p> <pre class="brush:php;toolbar:false;">const [loading, setLoading] = useState(true); const [data1, setData1] = useState(null); const [percentageDone, setPercentageDone] = useState(0); LoadDataFunction(){ // 在一个promise中调用多个api(假设有10个),并在每个api完成时调用setPercentageDone()。 } useEffect( () =&gt; { LoadDataFunction() },[]) useEffect( () =&gt; { if (满足条件) { LoadDataFunction() // 重新加载最新数据 } }, [条件]) return ( loading ? percentageDone : &lt;RenderData1Component data={data1}&gt; )</pre> <p>我只想在更新<code>data1</code>状态时才更新<code>&lt;RenderData1Component data={data1}&gt;</code>,而不是<code>percentageDone</code>。但是每当我更新<code>setPercentageDone()</code>时,它也会触发<code>&lt;RenderData1Component data={data1}&gt;</code>的重新渲染。</p>
P粉180844619
P粉180844619

全部回复(1)
P粉904405941

我不确定,但这可能对你有帮助。

const [loading, setLoading] = useState(true);
const [data1, setData1] = useState(null);
const [percentageDone, setPercentageDone] = useState(0);

const loadDataFunction = async () => {
  // 执行 API 调用并更新 percentageDone
};

useEffect(() => {
  loadDataFunction().then(() => {
    setLoading(false);
  });
}, []);

useEffect(() => {
  if (condition) {
    setLoading(true);
    loadDataFunction().then(() => {
      setLoading(false);
    });
  }
}, [condition]);

return (
  loading ? (
    <div>{percentageDone}% 加载中...</div>
  ) : (
    <RenderData1Component data={data1} />
  )
);

可能你正在给出多个条件,这可能会导致问题。也请检查一下。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号