【发布时间】:2017-06-21 00:18:06
【问题描述】:
我对使用 React/Node/Express 还很陌生,我选择了 kyt 作为样板,因为在寻找要工作的基本文件集时,它似乎是一个不错的选择。我正在使用默认的 React starter kyt。
我的工作是从 CMS 中取出一堆 JSON,并将其转换为 React 站点。
为此,我需要能够使用此 JSON 文件中的数据填充“路由”。我使用了下面发布的代码,效果很好。不过这里的问题是,我对 JSON 的“导入”意味着数据被编译到我的包中(通过 webpack)——这很好,直到 CMS 更新 JSON 文件,此时 bundle.js 不会更新,使其过时(除非我编写了一些代码来在每次 CMS 更新时重新编译捆绑包,我不喜欢这样的声音)。
我需要的是代码在运行时加载 JSON 文件,而不是在编译时加载。
谁能给我指个方向,好吗?我尝试了很多东西,包括 AJAX/axios 请求——但似乎没有任何效果。我读到 Webpack 的“System.import”功能可以帮助我,我已经尝试过了——但这也将我的数据捆绑到编译的 bundle.js 中。
import React from 'react';
import Route from 'react-router/lib/Route';
import IndexRoute from 'react-router/lib/IndexRoute';
import App from '../components/App.js';
import Home from '../components/Home.js';
import Standard from '../components/Standard.js';
import Listing from '../components/Listing.js';
import FourOhFour from '../components/FourOhFour.js';
// THIS IS THE PROBLEM - I don't want this to be bundled
import Model from '../app-json/model.json';
const componentRegistry = {
"Home": Home,
"Standard": Standard,
"Listing": Listing,
"FourOhFour": FourOhFour
}
function buildDynamicRoutes(config){
var routeJSX = [];
Object.keys(Model.posts).map((key) => {
var thisComponent = '';
if(Model.posts[key].template === 'page-listings.php'){
thisComponent = 'Listing';
} else if(Model.posts[key].template === ''){
thisComponent = 'Standard';
}
routeJSX.push(
<Route path={Model.posts[key].route} components={componentRegistry[thisComponent]} key={key} />
);
});
return routeJSX;
}
const routes = (
<Route path="/" component={App}>
<IndexRoute component={Home} />
{ buildDynamicRoutes() }
<Route path="*" component={FourOhFour}/>
</Route>
);
export default routes;
【问题讨论】:
标签: json node.js reactjs express react-router