您提到的链接概述了两种不同的策略。首先,动态段只是参数化的 URL,其中参数作为 URL 路径的一部分而不是在查询字符串中发送。所以这些需要公开可见。
其次,你可以使用道具。这是“在幕后”传递信息的唯一受支持的选项。此外,它是 React 中的首选方法。问题是,这会发生在哪里?
一种选择是在顶层从内部传递值Router.run()
。这在上面的链接中进行了概述,每个嵌套的处理程序都向下传递道具,或者显式地,像<RouteHandler search={this.props.search} />
,或者批发使用传播属性像<RouteHandler {...props} />
。
由于您只希望它发生在页面的子集上,您可以使用嵌套路由,其中父路由处理程序拥有相关属性作为其状态的一部分。然后它会以与上述情况相同的方式将它们作为普通道具传递给每个孩子。
例如,您的路线图可能如下所示:
<Route name="app" path="/" handler={App}>
<Route name="realestates" handler={RealEstatesPage}/>
<Route name="realestatesPrefiltered" handler={RealEstatePrefiltered}>
<Route name="homes" handler={RealEstateHouseDetails}/>
<Route name="apartments" handler={RealEstateHouseDetails}/>
<Route name="land" handler={RealEstateLandDetails}/>
</Route>
<Route name="realestate" handler={RealEstateDetails}/>
<DefaultRoute handler={MainPage}/>
</Route>
然后您的 RealEstatePrefiltered 组件可能如下所示:
RealEstatePrefiltered = React.createClass({
getInitialState: function () {
return { search: '', type: '' }; // Update from store or event.
},
render: function() {
return <div>
<RouteHandler search={this.state.search} type={this.state.type} />
</div>;
}
});
剩下的唯一问题是,如何更改此组件的状态?您可以为此使用 Flux 存储,或者您可以设置一个全局事件并让该组件监视更改。