suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Titel umgeschrieben als: Variablen werden nicht aktualisiert, wenn der useState()-Hook verwendet wird

Ich arbeite an einem sozialen Netzwerkprojekt mit React.

Ich möchte eine Komponente von einer Klassenkomponente in eine Funktionskomponente ersetzen und Hooks verwenden, dann entsteht ein globales Problem:

Wenn ich zu einem neuen Benutzer wechsle, zeigt die Seite den Status des vorherigen Benutzers an

Ich habe den useState()-Hook verwendet und alles debuggt, aber aus irgendeinem Grund wird eine neue Zustandskomponente beim Rendern nicht aktualisiert

const ProfileStatus = (props) => {
  const [edditMode, setEdditMode] = useState(false);
  const [status, setValue] = useState(props.status || "Empty");

  const onInputChange = (e) => {
    setValue(e.target.value);
  };
  const activateMode = () => {
    setEdditMode(true);
  };
  const deactivateMode = () => {
    setEdditMode(false);
    props.updateUserStatus(status);
  };

Ich dachte, das Problem sei, dass die Containerkomponente immer noch eine Klassenkomponente sei, aber nach dem Wiederherstellen hat sich nichts geändert.

P粉066224086P粉066224086449 Tage vor583

Antworte allen(1)Ich werde antworten

  • P粉674876385

    P粉6748763852023-09-11 17:31:34

    一种解决方法是使用useEffect钩子来在属性变化时触发更新。您可以使用该钩子来比较当前属性和先前属性,然后在状态中更新状态。

    根据您自己的代码,可以将此作为参考并进行调整。

    const ProfileStatus = (props) => {
      const [edditMode, setEdditMode] = useState(false);
      const [status, setValue] = useState(props.status || "Empty");
    
      useEffect(() => {
        setValue(props.status || "Empty");
      }, [props.status]);
    
      const onInputChange = (e) => {
        setValue(e.target.value);
      };
      const activateMode = () => {
        setEdditMode(true);
      };
      const deactivateMode = () => {
        setEdditMode(false);
        props.updateUserStatus(status);
      };

    Antwort
    0
  • StornierenAntwort