In diesem Artikel untersuchen wir, wie Zustand das Ersetzen von Zuständen mit der Funktion „setState“ ermöglicht, und konzentrieren uns dabei auf eine interessante Funktion: das Überschreiben des Zustands ohne Zusammenführen. Wir erklären Ihnen die Verwendung anhand eines einfachen Testfalls.
Bevor Sie sich den Code ansehen, ist es wichtig, den Unterschied zwischen dem Zusammenführen und dem Überschreiben-Status zu verstehen.
Merging State: Wenn Sie den Status in „Zustand“ (oder „Reagieren“) aktualisieren, wird standardmäßig der neue Status mit dem vorhandenen Status zusammengeführt. Es werden nur die aktualisierten Felder geändert, während der Rest des Status erhalten bleibt.
Überschreibender Status: Im Gegensatz dazu wird beim Überschreiben des Status der gesamte Status durch ein neues Objekt ersetzt, wobei alle Felder verworfen werden, die im vorherigen Status vorhanden waren, aber kein Teil davon sind des neuen Staates.
it('can set the store without merging', () => { const { setState, getState } = create( (_set) => ({ a: 1, }), ) // Should override the state instead of merging. setState({ b: 2 }, true) expect(getState()).toEqual({ b: 2 }) })
1. Erstellen des Stores Zunächst wird ein Zustandsspeicher mit einem Ausgangszustand erstellt:
it('can set the store without merging', () => { const { setState, getState } = create( (_set) => ({ a: 1, }), ) // Should override the state instead of merging. setState({ b: 2 }, true) expect(getState()).toEqual({ b: 2 }) })Der Anfangszustand ist ein Objekt mit einer einzelnen Eigenschaft, die auf 1 gesetzt ist. Die Erstellungsfunktion gibt zwei wesentliche Methoden zurück:
: Diese Methode wird verwendet, um den Status des Geschäfts zu aktualisieren.
: Diese Methode ruft den aktuellen Status des Stores ab.
2. Überschreiben des Zustands Der Schlüsselvorgang hier besteht darin, den aktuellen Zustand, { a: 1 }, durch einen völlig neuen Zustand zu ersetzen:
it('can set the store without merging', () => { const { setState, getState } = create( (_set) => ({ a: 1, }), ) // Should override the state instead of merging. setState({ b: 2 }, true) expect(getState()).toEqual({ b: 2 }) })
3. Validierung der Zustandsersetzung Abschließend stellt der Test sicher, dass der Zustand vollständig ersetzt wurde:
it('can set the store without merging', () => { const { setState, getState } = create( (_set) => ({ a: 1, }), ) // Should override the state instead of merging. setState({ b: 2 }, true) expect(getState()).toEqual({ b: 2 }) })Es wird erwartet, dass nach dem Aufruf von setState({ b: 2 }, true) der Status des Speichers nur noch { b: 2 } und nicht mehr { a: 1 } enthält.
Wie Sie sehen können, wird nextState zum neuen Status, wenn ein Ersetzungsflag vorhanden ist.
it('can set the store without merging', () => { const { setState, getState } = create( (_set) => ({ a: 1, }), ) // Should override the state instead of merging. setState({ b: 2 }, true) expect(getState()).toEqual({ b: 2 }) })Dies ist eine clevere Möglichkeit, wenn „replace“ falsch ist, was standardmäßig der Fall ist, (typeof nextState !== „object“ || nextState === null)) die Bedingung überprüft wird.
Verzehnfachen Sie Ihre Programmierkenntnisse, indem Sie fortgeschrittene Architekturkonzepte in Next.js/React üben, lernen Sie die Best Practices kennen und erstellen Sie Projekte in Produktionsqualität.
Wir sind Open Source – https://github.com/thinkthroo/thinkthroo (Geben Sie uns einen Stern!)
Verbessern Sie die Fähigkeiten Ihres Teams mit unseren Fortgeschrittenenkursen basierend auf der Codebasis-Architektur. Kontaktieren Sie uns unter
[email protected], um mehr zu erfahren!
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3