从 React Router 设置的路由中访问 Redux Store

在 React 应用程序中,使用 Redux 管理应用程序状态是一种流行的方式。但是,在使用 React Router 进行路由设置时,如何从路由组件中访问 Redux 存储可能会变得不那么明显。本文将详细介绍如何实现这个目标。

为什么要访问 Redux Store?

当我们使用 React Router 控制页面路由时,每个路由都对应于一个组件。然而,有时我们需要在多个路由中使用相同的数据。在这些情况下,通过将所有数据存储在 Redux Store 中,我们可以轻松地将状态传递给任何需要它的组件。

实现方法

假设我们有一个名为 todos 的 Redux 存储,其中包含待办事项列表。现在,我们希望在两个路由组件中访问这个存储:/todos/todos/:id。以下是如何实现这个目标的步骤:

步骤 1:创建 mapStateToProps 函数

首先,我们需要创建一个可以连接到 Redux Store 的函数,并将其导出给路由组件使用。我们可以使用 mapStateToProps 函数来获取我们需要的特定部分的状态。在本例中,我们只需要获取 todos 部分的状态。

-- ----------------------

------ ----- -------- - ----- -- ------------

步骤 2:在路由组件中使用 mapStateToProps 函数

接下来,我们需要将 mapStateToProps 函数连接到路由组件中。为此,我们可以使用 React Redux 的 connect 函数。

-- --------------------------

------ - ------- - ---- --------------
------ - -------- - ---- ---------------------

----- -------- - -- ----- -- -- -
  -- --------
--

----- --------------- - ----- -- --
  ------ ----------------
---

------ ------- -----------------------------------

步骤 3:在路由中渲染组件

现在,我们已经将 mapStateToProps 函数与路由组件连接起来,接下来我们需要在路由中渲染它。以下是示例代码:

-- ----------

------ - -------------- ----- - ---- -------------------
------ -------- ---- ------------------------
------ ----------- ---- ---------------------------

----- --- - -- -- -
  ---------------
    ------ ------------- -------------------- --
    ------ ----------------- ----------------------- --
  ----------------
--

------ ------- ----

结论

通过这种方式,我们可以轻松地从路由组件中访问 Redux 存储,并在多个路由中共享状态。虽然这只是一个简单的例子,但它可以应用于更复杂的应用程序中,并且可以帮助您更好地管理您的应用程序状态。

示例代码

下面是完整的示例代码:

-- ----------------------

------ ----- -------- - ----- -- ------------

-- --------------------------

------ - ------- - ---- --------------
------ - -------- - ---- ---------------------

----- -------- - -- ----- -- -- -
  -- --------
--

----- --------------- - ----- -- --
  ------ ----------------
---

------ ------- -----------------------------------

-- ----------

------ - -------------- ----- - ---- -------------------
------ -------- ---- ------------------------
------ ----------- ---- ---------------------------

----- --- - -- -- -
  ---------------
    ------ ------------- -------------------- --
    ------ ----------------- ----------------------- --
  ----------------
--

------ ------- ----

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/27694