为什么当我解构属性时,接收 props 的组件不起作用,但当我使用 props.key 时它正在工作?



问题

我有一个使用此 React Redux 样板的应用程序:https://github.com/flexdinesh/react-redux-boilerplate

我创建了一个连接到注入的减速器+传奇的新页面。 我收到以下道具:postsloadingerrorloadPostsmatch

当我直接使用这些应用程序时,该应用程序按预期工作。但是一旦我开始解构道具,应用程序就会出现意外的行为。

尤其是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(在我的化简器的初始状态下)。所以我现在有两项检查。

对不起,伙计们。太蠢了。

相关内容

  • 没有找到相关文章

最新更新