reactjs - React Router Link在输入时未重定向
问题描述
我正在尝试构建一个简单的新闻应用程序作为练习。我将 NewsApi 用于所有数据。
我点击了他们的“搜索”端点,当我点击链接时一切正常,但是当我点击回车时,我得到“警告:道具类型失败:道具to
在 中被标记为必需Link
,但它的值为undefined
。” 无论最后一个搜索主题是什么,它都会到达终点。即搜索 yankees 并单击链接,它可以工作,但然后我输入 dodgers 并按 Enter 并转到“/yankees?”
import React, { useState } from "react";
import { Link, useHistory } from "react-router-dom";
const Search = () => {
const [input, setInput] = useState("");
let history = useHistory()
const handleEnter = (e) => {
if (e.keyCode == "Enter") {
history.push(`/${e}`);
} else {
setInput(e);
}
};
return (
<form>
<input
onChange={(e) => handleEnter(e.target.value)}
/>
<Link to={input}>Search</Link>
</form>
);
};
export default Search;
我能够让它像这样工作
const Search = () => {
const [input, setInput] = useState("");
let history = useHistory();
return (
<form>
<input
onChange={(e) => {
setInput(e.target.value);
}}
onKeyDown={(e) => {
if (e.code === "Enter") {
history.push(`/${input}`);
}
}}
placeholder='Search by keyword'
/>
<Link to={input}>Search</Link>
</form>
);
};
它现在在按下回车键时推送到正确的组件,但在 url 中,搜索主题以 ? 结尾 即 localhost:3000/mets?,但是当单击链接时,URL 显示为 localhost:3000/mets。
我们有什么区别,是否可能存在性能问题,我该如何解决?
解决方案
当您传递Enter
按键事件时,您不应该使用onChange
. 您应该将其作为onKeyDown
事件处理。在处理程序中检查输入键码和状态中设置的输入值,然后用于Redirect
路由。
<Redirect to={input}/>
未经测试,但这是方法。
推荐阅读
- python-3.x - 'tuple' 和 'datetime.datetime' 的实例之间不支持 '>='
- javascript - 对如何在 Jquery 中使用 .not() 感到困惑
- arduino - PID 整定单轴设置
- python - 更改加载的文件 Django
- javascript - 过滤实时数据库数据
- maven - Jenkins SonarQube 插件多模块代码覆盖率不显示
- mysql - 如何在Mysql中删除另一列为空的一个条件下的重复行
- python - 使用 valgrind 制作 python 后导入和安装 numpy 时出错
- java - Spring Boot 2.0.3 JDBC 会话持久性错误
- pandas - 使用字典的 Pandas 跨列排名错误