首页  >  问答  >  正文

功能组件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( () => { LoadDataFunction() },[]) useEffect( () => { if (满足条件) { LoadDataFunction() // 重新加载最新数据 } }, [条件]) return ( loading ? percentageDone : <RenderData1Component data={data1}> )</pre> <p>我只想在更新<code>data1</code>状态时才更新<code><RenderData1Component data={data1}></code>,而不是<code>percentageDone</code>。但是每当我更新<code>setPercentageDone()</code>时,它也会触发<code><RenderData1Component data={data1}></code>的重新渲染。</p>
P粉180844619P粉180844619401 天前352

全部回复(1)我来回复

  • P粉904405941

    P粉9044059412023-08-18 11:26:59

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

    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} />
      )
    );

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

    回复
    0
  • 取消回复