reactjs - 使用参数反应重定向
问题描述
我正在做一个项目。我想执行一个重定向到另一个页面并传递参数的 onClick 方法。但是即使不传递参数,Redirect 方法也不起作用。谁能看看我的代码有什么问题?
在我的 app.js 中,我有切换路由的代码:
<Router>
<Switch>
<Route path= "/Home">
<Home/>
</Route>
<Route path= "/Projects">
<Projects/>
</Route>
<Route path= "/Results">
<Results/>
</Route>
</Switch>
</Router>
在我的组件中,我有:
function Search() {
const [searchTerm, setTerm] = useState("");
function handleChange(event) {
setTerm(event.target.value);
}
function handleClick(event) {
if (searchTerm.length > 0) {
return(
<Redirect
to={{
pathname: "/Results",
state: {searchTerm}
}}
/>
);
}
event.preventDefault();
}
return (
<div>
<nav class="navbar navbar-light bg-light">
<div class="container-fluid justify-content-end">
<form class="d-flex">
<input onChange={handleChange} value={searchTerm} class="form-control me-2" type="search" placeholder="Search" aria-label="Search" />
<button onClick={handleClick} class="btn btn-outline-success">Search</button>
</form>
</div>
</nav>
</div>
);
}
解决方案
Redirect
如果您从调用函数中返回它,它将不起作用。如果你想进入/results
页面,Redirect
你可以创建一个新状态:
const [redirect, setRedirect] = useState(false);
并将此状态设置为true
如果输入值满足所需条件searchTerm.length > 0
。然后,您可以使用条件渲染添加Redirect
到您的 return 语句
function handleClick() {
if (searchTerm.length > 0) {
setRedirect(true)
}
}
return (
<>
{redirect && (
<Redirect
to={{
pathname: "/Results"
}}
/>
)}
<input
type="text"
value={query}
onChange={(e) => setQuery(e.target.value)}
/>
<button onClick={handleClick}>Search</button>
</>
);
第二种方法是使用钩子useHistory()
:
const history = useHistory();
function handleClick() {
if (searchTerm.length > 0) {
history.push("/Results");
}
}
推荐阅读
- typescript - “...”[] 在打字稿中是什么意思?
- c# - 如何为 Azure 应用程序设置权限,以便应用程序可以访问站点及其驱动器?
- flutter - 在颤动中将对象转换为数组
- amazon-web-services - AWS DynamoDB 流:我可以将记录保存超过 24 小时吗?
- php - PHP:curl 脚本失败
- jquery - Gatsby JS:预加载器永远加载
- javascript - .map() 方法在项目之间打印“,”
- silverstripe - 从夹具文件生成的字段列表中的未知列
- python - Windows 上的 Visual Studio Code 远程 Python 调试
- javascript - Jquery脚本不适用于表单提交