Sto utilizzando react-router nella mia applicazione e sto cercando un modo per fermare il remount dei componenti che sono già nel DOM. Ad esempio, se sono all'URL dashboard
, allora avrò un associato DashboardComponent
montato. Quando eseguo la transizione a dashboard/settings
, il mio DashboardComponent
e il SettingsComponent
vengono rimontati nel DOM. Mi piacerebbe trovare un modo pulito per montare solo i bambini dell'URL corrente. È possibile?E 'possibile rimontare solo i nuovi componenti figlio sulla transizione react-router
Router:
import { Component, createFactory, PropTypes } from 'react'
import { Route, RouteHandler, DefaultRoute, NotFoundRoute } from 'react-router'
import Home from '../components/Home'
import Dashboard from '../components/Dashboard'
import ViewPlayers from '../components/clubs/ViewPlayers'
let route = createFactory(Route),
handler = createFactory(RouteHandler),
root = createFactory(DefaultRoute),
pageNotFound = createFactory(NotFoundRoute),
Transitions = createFactory(require('react/lib/ReactCSSTransitionGroup'));
class App extends Component {
constructor() {
super();
}
render() {
return (
Transitions({transitionName: 'fade'},
handler({key: this.context.router.getCurrentPath()})
)
)
}
}
App.contextTypes = {
router: PropTypes.func
};
let Router = (
route({path: '/', name: 'home', handler: App},
root({handler: Home}),
route({path: 'dashboard', name: 'dashboard', handler: Dashboard},
route({path: 'players', name: 'players', handler: ViewPlayers}),
)
)
);
export { Router };
Dashboard (componente principale):
import React from 'react'
import { RouteHandler, Link } from 'react-router'
import { _, div } from './Html'
export default
class Dashboard extends React.Component {
constructor() {
super();
this.state = {}
}
componentWillMount() {
console.log('mounted')
}
componentWillUnmount() {
}
render() {
return (
div({},
_(Link)({to: 'players'}),
_(RouteHandler)({})
)
)
}
}
Nota:_
è solo un wrapper per React.createFactory()
Quale versione di React Router stai usando? AFAIK il comportamento normale è quello di lasciare che React faccia il suo algoritmo di riconciliazione, che per impostazione predefinita non rimpiazzerà i componenti dell'albero che non cambiano tipo o posizione. * Re-render * i componenti, ma non dovrebbe rimontarli. –
Forse la mia comprensione di come reagisce rende il rendering non è corretto, ma nel cambio di transizione, 'componentWillMount' viene attivato - questo non indica che il componente sta rimontando? Sto usando 'v 0.13' –
Sì, ciò indica che il componente sta rimontando, ma ho controllato due volte su uno se il mio progetto React Router v0.13, e finché il componente rimane lo stesso e nella stessa posizione nel albero, non si rimonta. Hai qualche codice o un esempio riproducibile che puoi condividere? –