问题
我有一个使用此 React Redux 样板的应用程序:https://github.com/flexdinesh/react-redux-boilerplate
我创建了一个连接到注入的减速器+传奇的新页面。 我收到以下道具: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 不再运行,因此不会获取新帖子。因为母鸡也是useEffect
钩子内console.log
未定义甚至不运行。但比如console.log
之外的loading
道具确实不是undefined
(但这仍然不能解释为什么它使用(props)
作为参数)。
我只是用错useEffect
吗?
非常感谢
好吧,伙计们,这完全是我的错。猜猜我太累了:D。以下是导致问题的原因:
我在useEffect
钩中获取我的帖子。我还渲染了一个组件,我在posts
中传递。但是这些帖子不可用,因为组件必须等待数据进入。所以我完全忘记了我必须等待数据。
以前:
return <PostsGroup posts={posts} />;
之后:(正确)
return <PostsGroup posts={posts || []} />;
我有一个看起来像这样的检查:
if (loading) return <CircularProgress />;
(在另一个返回之前)。但这并不重要,因为当组件最初渲染时加载是错误的。 所以我还将初始值从loading
设置为true
(在我的化简器的初始状态下)。所以我现在有两项检查。
对不起,伙计们。太蠢了。