React-роутер всегда создает обработчик

Я только начал, поэтому я не знаю, является ли это желаемым поведением или я что-то пропустил. Я использую архитектуру Flux (в частности, Reflux, но это не должно быть актуально). В моем супер-простом тестовом приложении:

var App = React.createClass({
    render: function () {
        return (
            <div className="container">
                <Header />
                <RouteHandler />
            <div>
        );
    }
});

var routes = (
    <Route name="app" path="/" handler={App}>
        <Route name="employees" handler={Employees}/>
        <Route name="company" handler={Company}/>
        <Route name="timesheets" handler={Timesheets}/>
        <DefaultRoute handler={Company} />
    </Route> 
);

Router.run(routes, function (Handler) {
    React.render(<Handler/>, document.getElementById('main'));
});

Обработчики - это компоненты React, самая простая установка. Когда приложение запускается, я попадаю на страницу "компании", как и ожидалось. Затем, когда я перехожу к "сотрудникам", все хорошо, но когда я перехожу обратно к "компании", я наблюдаю, что создается совершенно новый компонент {Company}, таким образом разрушая мое состояние. Это приведет ко многим ненужным вызовам API, если я не делаю что-то неправильно или не понимаю.

Есть ли способ указать маршруту использовать существующий обработчик, если таковой существует, и просто перерисовать его? Вместо создания нового класса?

1 ответ

Хранение государства во флюсовом магазине

Одним из решений для вас было бы сохранить состояние в магазине потоков. Когда компонент смонтирован, запросите данные из хранилища в getInitialState() функция.

Сохранение состояния в родительском компоненте

Если вы не хотите использовать хранилище потоков (потому что это увеличивает сложность вашего простого примера), я рекомендую сохранить состояние в родительском компоненте и передать его вам в качестве реквизита.

Конечно, это будет работать только в том случае, если ваш родительский компонент не отключится. Я считаю, что корневой компонент <Handler /> в вашем примере должен оставаться подключенным между переходами состояний в вашем примере.

Я рекомендую вам взглянуть на этот учебник, в котором рассказывается, как передавать реквизиты дочернему компоненту.

В этом уроке рассказывается, как общаться с родителями от ребенка.

Другие вопросы по тегам