javascript - 为什么当我解构属性时接收道具的组件不起作用,但是当我使用 props.key 时它起作用了?
问题描述
问题
我有一个使用这个 React Redux Boilerplate 的应用程序:https ://github.com/flexdinesh/react-redux-boilerplate
我创建了一个连接到注入的 reducer + saga 的新页面。我收到以下道具:posts
、、、和loading
error
loadPosts
match
当我直接使用这些时,应用程序按预期工作。但是,一旦我开始解构道具,应用程序的行为就出乎意料。
尤其是match
道具。
当我这样做时:
const SubforumPage = (props) => {
useEffect(() => {
const { id: subId } = props.match.params;
console.log('props: ', subId);
}, []);
// .... other code
}
没问题,一切正常。
但是当我这样做时:
const SubforumPage = ({match}) => {
useEffect(() => {
const { id: subId } = match.params;
console.log('props: ', subId);
}, []);
// .... other code
}
match
突然变得不确定!
我真的不知道为什么会发生这种情况。这是我第一次看到这样的错误。
这个特定页面在路由文件中是这样设置的:
<Route path="/sub/:id" component={SubforumPage} />
(props)
在函数参数中使用时它显然有效,但不适用于({match})
为什么是这样?可以请人在这里帮助我。
我尝试了什么?
- 我不断地开始分解一个又一个的道具。起初这种方法是有效的,它仍然不是未定义的,但是当我得到一些道具时,不同的是,它会停止工作。
我认为这与我如何使用我的useEffect()
钩子有关?我传递了一个空数组,所以它只是在安装时运行。似乎当我刷新页面时,帖子被清除但 useEffect 不再运行,因此新帖子不会被获取。因为 henconsole.log
内部的useEffect
钩子也是undefined甚至没有运行。但是例如useEffect 之外的道具确实不是loading
(
但这仍然不能解释为什么它作为参数使用)。console.log
undefined
(props)
我只是用useEffect
错了吗?
非常感谢
解决方案
好吧,伙计们,这完全是我的错。我想我太累了:D。这是导致问题的原因:
我把我的帖子放在了useEffect
钩子里。我还渲染了一个我传入的组件posts
。但是帖子不可用,因为组件必须等待数据进来。所以我完全忘记了我必须等待数据。
前:
return <PostsGroup posts={posts} />;
之后:(正确)
return <PostsGroup posts={posts || []} />;
我有一个看起来像这样的地方:
if (loading) return <CircularProgress />;
(在另一个返回之前)。但这并不重要,因为在组件最初呈现时加载是错误的。所以我还将初始值设置为从loading
to true
(在我的减速器的 initialState 中)。所以我现在有两个检查。
对不起大家。这么笨。
推荐阅读
- php - 如何在“未找到与您的选择匹配的产品”WooCommerce 消息中添加 HTML
- python - 从 SQL Server 代理运行代码时出现问题 - azure.storage.blob - 找不到模块 azure
- python - 在地图上叠加等高线图
- node.js - 将其他命令发送到使用 exec - nodejs 运行的 powershell 脚本中
- javascript - 从 Rich 中读取文件名:FileUpload using javascript
- python - 使用 systemd 启动 python 代码的问题
- reactjs - 太多的重新渲染 ReactJs
- javascript - 我想从 JSON Stringify 中提取某些字段,例如名称、金额和详细信息
- ruby-on-rails - 嵌套在模块内的类的Rspec未初始化常量 - Ruby on Rails
- python - K 表示算法实现