Javascript ReactJS-在主组件中重定向

Javascript ReactJS-在主组件中重定向,javascript,reactjs,Javascript,Reactjs,我想重定向到其他网页的搜索结果后,提交表单(搜索栏功能) 我通常会在render()中使用return重定向,但现在无法重定向,因为我需要渲染整个站点(搜索栏位于主组件中)。 我已经尝试了this.props.history.push('/search/'+this.state.value)和this.context.router.history.push('/search/'+this.state.value)来代替注释,但它不起作用 (为清晰起见,代码简化) import React,{Co

我想重定向到其他网页的搜索结果后,提交表单(搜索栏功能)

我通常会在
render()
中使用
return
重定向,但现在无法重定向,因为我需要渲染整个站点(搜索栏位于主组件中)。 我已经尝试了
this.props.history.push('/search/'+this.state.value)
this.context.router.history.push('/search/'+this.state.value)
来代替注释,但它不起作用

(为清晰起见,代码简化)

import React,{Component}来自“React”;
进口{
路线,,
导航链接,
浏览器路由器
}从“反应路由器dom”;
从“/Search”导入搜索;
从“react Autosuggest”导入Autosuggest;
类应用程序扩展组件{
建造师(道具){
超级(道具);
this.state={value:''};
this.search=this.search.bind(this);
}
//反应自动建议代码
搜索(e){
e、 预防默认值();
//重定向到“/search/”+this.state.value
}
render(){
返回(
{/*更新this.state.value的自动建议输入*/}
{/*其他路线*/}
);
}
}
导出默认应用程序;
如果我尝试使用它们,
this.props.history
this.context.router.history
都是未定义的
(显然)无法代替

进行渲染。您是否尝试过使用HOC to
应用程序作为道具访问

类应用程序扩展组件{
// ...
搜索(e){
e、 预防默认值();
this.props.history.push(`/search/${this.state.value}`)
}
// ....
}
使用路由器导出默认值(应用程序)
您需要从
react路由器dom
导入

import {Redirect} frpm 'react-router-dom'
和用法

search(e) {
    e.preventDefault();
    if(this.state.value){
        return <Redirect to={`/search/${this.state.value}`}
    }
}
搜索(e){
e、 预防默认值();
if(this.state.value){

return
有什么问题?我不能执行类似于
render(){return(this.state.shouldSearch?:{/*Site*/});}
的操作,因为站点不会加载,当我尝试使用
search(e){e.preventDefault();return}
它什么都不做为什么你要在渲染中添加条件。这里不需要条件渲染。删除条件只会使浏览器路由变得简单。是的,我知道-我只是想说,我不能像withRouter()中的包装应用程序那样给出“错误:不变量失败:你不应该在外部使用”只需从应用程序中删除
BrowserRouter
,将其放在应用程序组件之外
也无需在渲染函数中添加条件。感谢您的帮助,但我尝试按照您的建议添加
,但它不会执行。零错误,无任何问题-它就是不起作用。我添加了
console.log()
返回之前,确保
是否有效-它是否有效。`完全忽略我您是否将
绑定到您的
serach
函数,例如,
this.search=this.search.bind(this)
,在构造函数中?是的,我只是忘了在这篇文章的片段中添加它。很抱歉,谢谢,它可以工作。但由于它正在刷新所有内容,我将使用它作为临时解决方案。我认为最好的选择是将整个标题移动到单独的组件中,所有内容都应该按预期工作
search(e) {
    e.preventDefault();
    if(this.state.value){
        return <Redirect to={`/search/${this.state.value}`}
    }
}