suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Funktionale Komponenten reagieren: Das Aktualisieren eines Status führt dazu, dass die gesamte Seite neu gerendert wird

<p>Vielen Dank für Ihre Hilfe im Voraus. Ich bin mir nicht sicher, warum, wenn ich den Status <code>loadDataFunction()</code> aktualisiere, obwohl dies eigentlich nicht der Fall sein sollte Das soll nicht so sein. Sollte es nicht nur aktualisiert werden, wenn sich data1 ändert? </p> <p>Ich habe so einen Code. </p> <pre class="brush:php;toolbar:false;">const [loading, setLoading] = useState(true); const [data1, setData1] = useState(null); const [percentageDone, setPercentageDone] = useState(0); LoadDataFunction(){ // Rufen Sie mehrere APIs (sagen wir, es sind 10) in einem Versprechen auf und rufen Sie setPercentageDone() auf, wenn jede API abgeschlossen ist. } useEffect( () => { LoadDataFunction() },[]) useEffect( () => { if (Bedingung erfüllt) { LoadDataFunction() // Die neuesten Daten neu laden } }, [Zustand]) zurückkehren ( Laden ? ProzentsatzFertig : <RenderData1Component data={data1}> )</pre> <p>Ich möchte <code><RenderData1Component data={data1}></code> nur aktualisieren, wenn der Status von <code>data1</code> aktualisiert wird. /code>. Aber wenn ich <code>setPercentageDone()</code> aktualisiere, wird auch ein erneutes Rendern von <code><RenderData1Component data={data1}></code> ausgelöst. </p>
P粉180844619P粉180844619466 Tage vor399

Antworte allen(1)Ich werde antworten

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

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

    Antwort
    0
  • StornierenAntwort