Ocasionalmente tengo componentes de reacción que tienen un estado conceptual que quiero restablecer. El comportamiento ideal sería equivalente a eliminar el componente antiguo y leer un componente nuevo y prístino.
React proporciona un método setStateque permite establecer el propio estado explícito de los componentes, pero que excluye el estado implícito, como el enfoque del navegador y el estado del formulario, y también excluye el estado de sus hijos. Capturar todo ese estado indirecto puede ser una tarea complicada, y prefiero resolverlo de manera rigurosa y completa en lugar de jugar a whack-a-mole con cada nuevo estado sorprendente.
¿Existe una API o patrón para hacer esto?
Editar: hice un ejemplo trivial que demuestra el this.replaceState(this.getInitialState())enfoque y lo contrasta con el this.setState(this.getInitialState())enfoque: jsfiddle - replaceStatees más robusto.

keyen este caso).replaceState()ygetInitialState()son a la vez obsoleto en los nuevos reactjs ES6-estilo de clase. Úselo en suthis.setState(this._getInitialState())lugar. Además, no puede nombrar su propia función de inicializador de estadogetInitialState(): reaccionar arroja una advertencia, llámelo de cualquier otra manera y hágalo explícitamentestate = this._getInitialState()en el nivel superior de la clase.En realidad, debería evitarlo
replaceStatey utilizarlosetStateen su lugar.Los documentos dicen que
replaceState"puede eliminarse por completo en una versión futura de React". Creo que definitivamente se eliminará porquereplaceStaterealmente no concuerda con la filosofía de React. Facilita hacer que un componente de React comience a sentirse como un cuchillo suizo. Esto contrarresta el crecimiento natural de un componente de React de volverse más pequeño y más hecho a propósito.En React, si tiene que pecar de generalización o especialización: apunte a la especialización. Como corolario, el árbol de estado de su componente debe tener cierta parsimonia (sin embargo, está bien romper con buen gusto esta regla si está construyendo un nuevo producto flamante).
De todos modos así es como lo haces. Similar a la respuesta de Ben (aceptada) anterior, pero así:
Además (como también dijo Ben) para restablecer el "estado del navegador", debe eliminar ese nodo DOM. Aproveche el poder del vdom y use un nuevo
keyaccesorio para ese componente. El nuevo render reemplazará ese componente al por mayor.Referencia: https://facebook.github.io/react/docs/component-api.html#replacestate
fuente
this.replaceState? Porque lo es.getInitialState()(digamos, en un controlador onClick). En este caso, esa nueva propiedad aún estaría presente después del 2dogetInitialState().getInitialState. Al igual que declarar todas sus variables en una función JS en la parte superior de la función. Nota al margen: la solución de Ben Alpert es casi idéntica a la mía ... ¡y él es un mantenedor oficial de React!Agregar un
keyatributo al elemento que necesita reinicializar, lo recargará cada vez que elpropsostateasociado al elemento cambie.Aquí hay un ejemplo:
fuente