在Redux中存储React路由

时间:2017-10-20 14:05:59

标签: javascript reactjs redux react-router react-redux

我使用react-router v4生成从异步API加载的动态路由。从API检索的数据通过一个函数传递,该函数将创建React路由,类似于:

import Home from "containers/home"
import FeaturePage from "containers/featurePage"

response.map((item) => {
  if (item.value.toLowerCase() === "home") {
    return {
      path: item.path,
      component: Home,
      exact: item.isExact
    }
  } else if (item.value.toLowerCase() === "featurePage") {
    return {
      path: item.path,
      component: FeaturePage,
      exact: item.isExact
    }
  } else {
      // ...etc
  }
});

加载路径后,会像往常一样使用action-reducer将它们添加到Redux存储中。这适用于redux存储支持函数。

但是将函数存储在Redux存储区doesn't seem to be the best way forward中。什么是更好的实施?我需要存储需要渲染的组件,这是不可序列化的。

2 个答案:

答案 0 :(得分:1)

只需将组件名称存储为字符串? (不知道为什么你想把它们添加到商店)

您可以稍后使用它们:

import Home from "containers/home"
import FeaturePage from "containers/featurePage"

// Assume the routes have been added to the redux store
const Routes = {
  Home,
  FeaturePage
};

response.map(({ component, path, exact }) => {
  return (
    <Route
      key={ path }
      exact={ exact }
      path={ path }
      component={ Routes[component] }
    />
  );
});

答案 1 :(得分:0)

React组件由组件的状态(由stateprops组成)和一些基于状态修改的行为(如函数和html标记)组成。一旦创建了组件,组件的行为就不会改变;只有组件的状态才会改变。

我认为保存组件的状态足以在以后重新创建组件,而您不需要在Redux中保存组件;而是在Redux中保存组件的状态。

关于在Redux中保存路由,同样适用;你应该在Redux商店中保存Route的状态而不是路由本身。您可以拥有一个可以获取此状态对象的函数(包含路径,isExact,组件名称等)并将其转换为真实组件。

希望这有帮助!