反应& Redux:如何在儿童发射事件之前在父母身上开除事件?

时间:2017-11-22 22:32:01

标签: reactjs redux

在子组件出现之前,我一直试图在根组件中触发事件(即调用Redux操作)。

Enter image description here

在此图中......

  • 父级(即所有者)有一个动作fetchData()。当网址为/时,我们只会看到此parent
  • 孩子(即Ownee)有一个动作getDetail(id)。当网址为/child时,我们会在child上看到此parent
  • 两个组件都会在componentWillMount
  • 中触发事件

问题是,当您直接访问/child时,fetchData()在调用getDetail(id)后被称为

(当您访问/并访问/chile时,会先触发fetchData()。)

是否可以从较高组件触发事件到较低组件?

P.S。

以下是此问题的背景信息......

父级是一个博客帖子列表,其子级是详细信息页面,您可以在其中查看单个博客帖子的详细信息。

在列表(父页面)上,您点击detail按钮,该按钮会引导您进入详细信息页面。为了实现这一点,有必要在显示它们的细节之前获取所有项目。

2 个答案:

答案 0 :(得分:1)

修改 - 更新以反映您的上述回复。

我认为正确的方法是让您的州反映到达详细信息页面的可能方式。让fetchData()实际确定是否需要提取,并从父组件和子组件中调用它。

听起来你正在使用react-router或类似的方法 - 这种情况很常见。我建议您跟踪当前所选的ID(如果您正在查看帖子列表,则未定义),然后在子项目可用时对其进行渲染。

我认为假设fetchData()是异步的,生命周期方法的顺序是真正的问题。

答案 1 :(得分:1)

因此,解决这个问题的方法是考虑您的组件正在做什么。您应该有一个主页,按标题和日期或您决定的任何内容列出帖子。然后,当您单击其中一个时,它将转到带有博客帖子的页面。

因此,您应该拥有PostList组件和Post组件。 PostList应该获取显示列表所需的所有数据。 Post应获取所有数据以显示帖子。渲染PostList时,它不应呈现任何PostPost只应在您发布帖子的网址时进行呈现。要获得该行为,您需要一个类似foundreact router的路由器。

现在可能会发现PostList正在获取Post显示每篇博文所需的所有详细信息。那样就好。您的州管理层应该检测到您已经拥有博客文章而不是获取它。这就是为什么你看到像fetchBlogPostIfNeeded这样的行为 - 调用该函数通常检查本地状态以查看博客文章是否已经存在,如果是,它什么也不做。如果没有,它实际上取了它。

通过这种组合和适当的服务器端路由,您的博客应支持在帖子列表或查看单个帖子时进行硬刷新。关键部分是您使用URL从列表转到帖子。为此,您将使用Link组件(找到并且路由器具有与此相同名称的组件)。