React.js传递参数与Router不在URL中

Pio*_*tek 6 javascript reactjs react-router

嗨,我想从一个页面移动到另一个页面,并通过参数searchtype.我可以通过URL中没有这些参数的react路由器实现这一点吗?

我正在看这个https://github.com/rackt/react-router/blob/master/docs/guides/overview.md#dynamic-segments和使用的解决方案,<RouteHandler {...this.props}/>但是直到我将params传递给url它才能工作.

那有什么解决方案吗?

编辑1.路线:

<Route name="app" path="/" handler={App}>
    <Route name="realestates" handler={RealEstatesPage}/>
    <Route name="realestatesPrefiltered" path="realestatesPrefiltered/:search/:type" handler=RealEstatesPage}/>
    <Route name="realestate" handler={RealEstateDetails}/>
    <DefaultRoute handler={MainPage}/>
</Route>
Run Code Online (Sandbox Code Playgroud)

Tod*_*odd 5

您提到的链接概述了两种不同的策略。首先,动态段只是参数化的 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>
Run Code Online (Sandbox Code Playgroud)

那么您的 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>;
    }
});
Run Code Online (Sandbox Code Playgroud)

剩下的唯一问题是,您如何更改此组件的状态?您可以为此使用 Flux 存储,或者您可以设置一个全局事件并让该组件监视更改。