DataSearch 和 RR 重定向
DataSearch and RR Redirect
我正在使用 ReactiveSearch 搜索组件为我的搜索应用构建一个不错的 UI。我正在使用 onQueryChange 道具调用一个函数,该函数用于在用户提交搜索查询后路由到搜索结果页面。
在用户使用 DataSearch 组件提交查询后,如何使用 React Router v4 重定向到搜索结果页面?
到目前为止我有
<DataSearch
..
onQueryChange={
(prevQuery, nextQuery) => {
console.log("prev query: ", prevQuery);
console.log("next query: ", nextQuery);
{ nextQuery !== '' &&
<Redirect to="/results"/>,
}
}
}
我查看了 here 并尝试针对我的用例进行更改。但是,它不起作用。
更新:
关于我在下面的评论。我记得我以前问过类似的问题,所以我去我的个人资料看看是否能找到它,我找到了。我将该信息与 相结合,我相信我能够想出解决方案:
if (redirect) {
return <Redirect to={{
pathname: '/search',
state: { pathname: this.state.redirect }
}}/>
}
对于重定向,最好使用 onValueSelected
(docs),因为每次您在搜索框中键入内容时查询都会更改(以获取建议)。
为了使用 React 路由器 4 以声明方式处理重定向,您将在选择一个值时更新父组件的 state
并有条件地从 React 路由器渲染 Redirect
组件。例如,
class Main extends Component {
state = {
redirect: false
};
render() {
const { redirect } = this.state;
if (redirect) {
// when this renders it would redirect to the specified route
return <Redirect to="/search" />;
}
return (
<ReactiveBase
...
>
<DataSearch
...
onValueSelected={(value, cause, source) => {
// just setting the redirect state to true for redirection
this.setState({
redirect: true
});
}}
/>
</ReactiveBase>
);
}
}
另一种方法是使用来自 React Router 的 withRouter
高阶组件,但上述方法也可以。
我正在使用 ReactiveSearch 搜索组件为我的搜索应用构建一个不错的 UI。我正在使用 onQueryChange 道具调用一个函数,该函数用于在用户提交搜索查询后路由到搜索结果页面。
在用户使用 DataSearch 组件提交查询后,如何使用 React Router v4 重定向到搜索结果页面?
到目前为止我有
<DataSearch
..
onQueryChange={
(prevQuery, nextQuery) => {
console.log("prev query: ", prevQuery);
console.log("next query: ", nextQuery);
{ nextQuery !== '' &&
<Redirect to="/results"/>,
}
}
}
我查看了 here 并尝试针对我的用例进行更改。但是,它不起作用。
更新:
关于我在下面的评论。我记得我以前问过类似的问题,所以我去我的个人资料看看是否能找到它,我找到了。我将该信息与
if (redirect) {
return <Redirect to={{
pathname: '/search',
state: { pathname: this.state.redirect }
}}/>
}
对于重定向,最好使用 onValueSelected
(docs),因为每次您在搜索框中键入内容时查询都会更改(以获取建议)。
为了使用 React 路由器 4 以声明方式处理重定向,您将在选择一个值时更新父组件的 state
并有条件地从 React 路由器渲染 Redirect
组件。例如,
class Main extends Component {
state = {
redirect: false
};
render() {
const { redirect } = this.state;
if (redirect) {
// when this renders it would redirect to the specified route
return <Redirect to="/search" />;
}
return (
<ReactiveBase
...
>
<DataSearch
...
onValueSelected={(value, cause, source) => {
// just setting the redirect state to true for redirection
this.setState({
redirect: true
});
}}
/>
</ReactiveBase>
);
}
}
另一种方法是使用来自 React Router 的 withRouter
高阶组件,但上述方法也可以。