Forse è possibile sfruttare i callback onEnter e onChange quando si configura rootRoute.
In onEnter richiamata indietro è possibile registrare il percorso percorso iniziale. Nel callback onChange è possibile confrontare il percorso cur/successivo, controllare la cronologia del percorso registrato e registrare il percorso. Pertanto, poiché è possibile controllare e confrontare il percorso del percorso ogni volta che si modificano i percorsi, è possibile interrompere qualsiasi collegamento circolare.
A proposito di salvare lo stato tutto del componente, se si utilizza redux, l'intero stato app può salvare in un oggetto, il negozio redux.
Se si desidera salvare lo stato del componente in quel momento prima di lasciare, si può inviare un'azione save component state
in componentWillUnmount
, e recuperare lo stato in componentWillMount
.
Ecco un frammento:
var rootRoute = {
path: '/',
onEnter: enter,
onChange: change,
component: MyApp,
indexRoute: { component: Home },
childRoutes: [
LoginRoute,
...
{path: 'home', component: Home},
{
path: '*',
component: NotFound
}
]
};
function enter (next) {
// pathStore record all navigation history
pathStore.record(next.location.pathname);
}
function change (cur, next, c) {
// when hit cur path links in nav, pathname is same, key is different.
if (cur.location.pathname !== next.location.pathname) {
...
}
}
un caso d'uso è quello di preservare la posizione di scorrere e fare una transizione rovesciata di tornare al precedente stato esatto (ce ne sono molti di stato nascosta implicita, come stati d'ingresso, la posizione di scorrimento, ecc. che non sono coperti da React) – gre