javascript - 使用反应路由器时发送道具
问题描述
我已经有一段时间没有使用过如此裸露的反应路由器了。我试图了解如何在仍然使用反应路由器的历史记录来更改 URL 的同时发送道具。这听起来微不足道,但我很难理解这一点。我对路由的最低设置足以初始化历史对象。从那里开始,我正在尝试像往常一样构建应用程序以在不使用 redux 的情况下发送道具。
index.js
ReactDOM.render(
<Router>
<Route exact path='/'>
<App />
</Route>
</Router>
,document.getElementById('root')
应用程序.js
...
let history = useHistory();
...
return (
<div className="main-wrapper">
<header>
<Header />
</header>
<main>
<Route path='/'>
<Search collectWords={collectWords} searchWords={searchWords} />
</Route>
<Route path='/search-results'>
<SearchResults people={people} />
</Route>
</main>
</div>
);
当用户执行搜索时,会调用此函数,但这对我来说是中断的地方。我得到一个没有道具的空白屏幕,但 URL 确实发生了变化。
const searchWords = (e) => {
if (e) {
e.preventDefault();
restAPI.getPeople(words)
.then(response => {
setPeople(response.data.data);
history.push('/search-results');
})
.catch(error => { throw new Error(error) });
}
}
解决方案
感谢分享源代码。我找到了解决方案。你需要做两件事
- 转到
index.js
并exact
从Route
ReactDOM.render(
<Router>
<Route path="/"> {/*Remove exact from here */}
<App />
</Route>
</Router>,
document.getElementById("root")
);
- 完成上述操作后,它将解决您的问题,但随后您将收到另一个错误消息
people.map is not a function
。您需要将people
状态中的默认值从对象更改为数组。喜欢:
const [people, setPeople] = useState([]);// See mine is an array `useState([])`
现在一切都应该正常
推荐阅读
- html - 如何将导航链接移动到下拉列表中
- swift - 在 Chrome 等其他应用上快速打开网址
- r - 将列表中的网格化数据转换为数据框
- python - 如果包含在括号中,则替换列的字符串值
- javascript - 如何在 jQuery.get "Data" 中获取特定元素
- amazon-s3 - 有什么方法可以只同步 aws s3 存储桶中存在的文件而不是已删除的文件?
- r - R Shiny:如何在单击直方图中的条形时过滤数据表?
- mqtt - 新订阅时未使用 Mosquitto 的 QoS 1 消息
- react-native - react-native 自定义滑块,使用 `diffClamp`
- arrays - 更改数组中的字符串值以将 VueJS 中的每个单词大写