Warum wartet dieser Status, bis ein anderer Status aktualisiert wird oder eine schnelle Aktualisierung erfolgt? - Reagieren/NextJS
P粉232793765
P粉232793765 2023-09-08 15:09:10
0
1
549

EDIT: Die nächste Version ist 13.3.0

Ich habe einen Status namens localArray und möchte nur auf einen bestimmten Index aktualisieren. Deshalb habe ich mir überlegt, eine Zeitvariable zu erstellen, um dieses Array zu ändern und den Status mit dem Zeitwert zu aktualisieren. Das Problem ist, dass dieser Status erst bei einem anderen aktualisiert wird Der Status wird aktualisiert oder nach einer schnellen Aktualisierung wird er aktualisiert. Ich weiß nicht, warum das passiert

Hier ist ein minimal reproduzierbares Beispiel:

import { useState } from 'react'

function Test() 
{
    const [someState, setSomeState] = useState("");
    const [localArray, setLocalArray] = useState(["","","",""])

    const handleArrayChanges = ( { target: { name, value } } ) => {
        let newArray = localArray;
        newArray[Number(name)] = value;
        setLocalArray(newArray);
    }

    return (
        <div>
            <h4>Array state</h4>
            <textarea name='0' onChange={handleArrayChanges}/>
            <p> {localArray[0]}</p>

            <h4>Some other state</h4>
            <button onClick={() => {setSomeState("a")}}>Update some other state</button>
        </div>
      )
}

export default Test

Wie Sie sehen können, sollte nach der Aktualisierung des Array-Status das erste Element im Absatz angezeigt werden, dies geschieht jedoch erst, wenn der cis-Fall erklärt wird

P粉232793765
P粉232793765

Antworte allen(1)
P粉106301763

React 建立在状态不可变的假设之上。您正在改变现有的数组,而不是创建一个新的数组,因此在设置状态后,React 会比较之前和之后的状态,发现它们是相同的数组,因此认为没有任何变化。因此它不会重新渲染。

相反,创建数组的副本并对其进行修改:

const handleArrayChanges = ({ target: { name, value } }) => {
  let newArray = [...localArray]; // <--- creating a shallow copy
  newArray[Number(name)] = value;
  setLocalArray(newArray);
};
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!