Javascript 带有react路由器的全局数据

Javascript 带有react路由器的全局数据,javascript,reactjs,single-page-application,react-router,Javascript,Reactjs,Single Page Application,React Router,如何使用react路由器维护某些数据的中心/全局对象 假设我的React站点有20条不同的路线。在这20条路由中,有15条路由需要来自服务器的一个JSON文件,该文件几乎从不更改。我讨厌为每个新的URL/路由获取“/api/mydata” 我想我可以将数据保存在中,但这似乎有点骇人听闻,甚至可能不起作用。在路由器组件之间共享数据是否有更优雅的解决方案 编辑:我通过创建Data.js文件部分解决了这个问题: export var myData = function(cb) { ajax('GE

如何使用react路由器维护某些数据的中心/全局对象

假设我的React站点有20条不同的路线。在这20条路由中,有15条路由需要来自服务器的一个JSON文件,该文件几乎从不更改。我讨厌为每个新的URL/路由获取“/api/mydata”

我想我可以将数据保存在中,但这似乎有点骇人听闻,甚至可能不起作用。在路由器组件之间共享数据是否有更优雅的解决方案

编辑:我通过创建Data.js文件部分解决了这个问题:

export var myData = function(cb) {
  ajax('GET', '/api/mydata', resp => {
    myData = function() {
      return cb(resp);
    };
    cb(resp);
  });
};
然后像这样使用它:

myData(data => data.map(/* ...use the data */));

这样,每个生命周期只能获取一次数据。

Arrr。。。如果不想使用redux或flux,可以在新的js文件中创建这样的单例

let appState = {};
export default appState;

首先使用ajax将数据填充到此单例中。然后将其导入到需要数据的任何位置

您可以将这些数据作为道具存储在根组件中,并将其传递给子组件。react路由器中的路由不会重置道具。我建议你学习react redux或flux,他们解决了你的问题。我遇到过redux和flux,模糊地理解这就是他们解决的问题,但我太担心在我的程序中添加更多KB了redux是~2kb。我认为你不应该担心这类事情。为了让它正常工作,我尝试了太久……我以后只会使用redux。对于这个项目,我将只使用缓存控制头来使事情保持流线型。