1
ルータとコンポーネントを持つファイルがあります。まもなく、コードは次のようにされていますReact Routerが自動的に変更された後の状態を更新するには?
// define the routes for each language ..
const InnerRoutes = (
<Route>
<IndexRoute page="home" component={StaticPage}></IndexRoute>
<Route path="contacts" component={ContactsPage}></Route>
<Route path="(:page)" component={StaticPage}></Route>
</Route>
);
// define the routes for all the languages, using InnerRoutes ..
const AllRoutes = (
<Router history={browserHistory}>
<Route path='/' component={App} language="bg">
{InnerRoutes}
<Route path="en" language="en">
{InnerRoutes}
</Route>
</Route>
</Router>
);
// and render our app ..
ReactDOM.render(
AllRoutes,
document.getElementById('app')
);
私の質問は:どのように私は、ルータの変更がトリガされたときにApp
コンポーネントの状態を変更することができますか? もちろん、ルータのパラメータはアプリ状態にしておきます。
(現在私はApp
コンポーネントのメソッドcomponentDidUpdate
からルータのものを取り、その後、App
状態を変更するsetState
をトリガすることができます残念なことにので - 。。その後、私は二回トリガcomponentDidUpdate
を持っている)
に見ることができます。 'App'コンポーネントの状態に' language'があり、ルートが変更されたとき - 私は1)App'の状態が自動的に変更され、2)子供がトップレベルの 'App'コンポーネントから新しいプロップを受け取ります。 .........私が見ているように - 私は手動で状態を変更して、場所を 'App'でチェックしなければならないでしょう:( –
@peshohristov OK、私は私の答えを更新しました。あなたはどういう意味ですか? – tsuz
IMHOはnewLangを状態に保存する必要はありません。メソッドをレンダリングするロジックを移動してください。 'render(){const lang = this.props.location.pathname.split( '/')。shift(); ... } ' – mauron85