Używam routera reagowania w mojej aplikacji i szukam sposobu na zatrzymanie remontowania komponentów, które są już w DOM. Na przykład, jeśli jestem pod adresem URL dashboard
, będę mieć skojarzony DashboardComponent
zamontowany. Po przejściu na dashboard/settings
mój DashboardComponent
oraz SettingsComponent
zostają ponownie zamontowane w DOM. Chciałbym znaleźć czysty sposób montowania tylko dzieci z bieżącego adresu URL. Czy to jest możliwe?Czy można ponownie montować tylko nowe komponenty potomne na etapie zmiany routera reagowania
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 };
Panel (element nadrzędny)
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)({})
)
)
}
}
Uwaga:_
tylko opakowującym React.createFactory()
Jaką wersję routera React używasz? Normalnym zachowaniem AFAIK jest po prostu pozwolić Reactowi zrobić algorytm uzgadniania, który domyślnie nie będzie ponownie montował komponentów w drzewie, które nie zmieniają typu ani pozycji. Ponownie * renderuje * komponenty, ale nie powinien ich ponownie montować. –
Być może moja wiedza na temat tego, jak reagować na render, jest niepoprawna, ale w przypadku zmiany przejścia uruchamia się 'componentWillMount' - czy to nie oznacza, że komponent się ponownie montuje? Używam "v 0.13" –
Tak, oznacza to, że komponent jest ponownie montowany, ale dwukrotnie sprawdziłem na jednym, jeśli mój własny projekt Reaktor v0.13 i tak długo, jak komponent pozostaje taki sam i w tej samej pozycji w drzewo, nie jest ponownie montowane. Czy masz jakiś kod lub powtarzalny przykład, który możesz udostępnić? –