反应.js传递参数时路由器不在 URL 中
React.js pass parameters with Router not in URL
嗨,我想从一个页面移动到另一个页面,并将参数传递search
和type
。我可以使用 URL 中没有这些参数的反应路由器来实现这一点吗?
我正在查看此 https://github.com/rackt/react-router/blob/master/docs/guides/overview.md#dynamic-segments 和使用<RouteHandler {...this.props}/>
的解决方案,但在我将参数传递给 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>
您提到的链接概述了两种不同的策略。首先,动态段只是参数化的 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 = 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 存储,也可以设置一个全局事件并让此组件监视更改。
你可以在历史中使用状态,像这样
history.push({
pathname: '/about',
search: '?the=search',
state: { some: 'state' }
})
在第一个组件中,您可以触发链接或按钮的此onCick
browserHistory.push({
pathname: `/about`,
search : 'search'
state: {
type: 'type'
}
});
在您的其他组件中,您现在可以像以下方式抓取它们:
constructor(props) {
super(props);
this.state = {
search: props.location.search,
type: props.location.state.type
}
}
- 访问url[材质Ui+选项卡]时,Angular Ui路由器未加载视图
- 从使用react路由器的网络应用程序解析物理URL
- UI 路由器参数 URL 不起作用,只是重定向到 /
- 角度 2 路由器更改 URL 而不重新加载
- 动态模板 URL 在角度 ui 路由器中解析时
- 我可以让react路由器只覆盖一些url,并将其余的url正常传递给服务器吗
- Angular/UI路由器-如何在不刷新所有内容的情况下更新URL
- 在AngularJS ui路由器中,状态已更改,url已更改,但模板url未更改
- UI路由器:直接使用url访问路由
- Angular ui路由器向url添加哈希
- Angular,ui路由器;绑定”;到url,也不刷新
- Angular ui路由器,通过url/url变量保存状态
- 使用ui路由器实现动态URL路由的最佳方式是什么
- Angular ui路由器单元测试(状态为url)
- 未从url激发事件上的主干路由器
- react路由器在为url提供路径时忽略嵌套路由
- Angular UI路由器认为每个URL都不匹配并重定向
- AngularUI路由器-无法通过URL访问状态
- Ui路由器未按url路由
- Angular ui路由器可选url参数