这是我的问题,
我知道问题是客户端和服务器端的不同路径,但我认为这种情况(使用代理)在大公司中很常见。当浏览器收到服务器呈现响应时,如何正确运行?
我正在寻找每个人的想法。
我的路线代码(客户端和服务器端共享)
<Route path='/' component={Connector}>
<Route component={BaseLayout}>
<IndexRoute components={Home} onEnter={onRouteChange.bind(this, 'home')}/>
<Route path="articleDetail/:id" components={ArticleDetail} onEnter={onRouteChange.bind(this, 'home')}/>
<Route path="about" components={About} onEnter={onRouteChange.bind(this, 'about')}/>
<Route path="joinUs" components={JoinUs} onEnter={onRouteChange.bind(this, 'JoinUs')}/>
</Route>
</Route>
这是我的服务器呈现代码
async function serverRender(ctx, next, renderProps) {
return new Promise((resolve, reject) => {
fetchArticlesAPI({API_URL, page: 1}, apiResult => {
const homeReducer = {
"home": {
fetched: true,
data: apiResult.dataList,
times: 1,
page: 1
}
};
const preloadedState = {"home": homeReducer.home};
const store = createStore(rootReducer, preloadedState);
const html = renderToString(
<Provider store={store}>
<RouterContext {...renderProps} />
</Provider>
);
const finalState = store.getState();
const finalStateToClient = JSON.stringify(finalState).replace(/</g, '\\x3c');
const body = ctx.render('index', {
title: "盘古首页(同构)",
dev: argv.env === 'development',
finalStateToClient,
html
});
resolve(body);
});
});
}
export default async (ctx, next) => {
const {redirectLocation, renderProps} = await _match({routes: routes, location: ctx.url});
if (redirectLocation) {
ctx.redirect(redirectLocation.pathname + redirectLocation.search)
} else if (renderProps) {
await serverRender(ctx, next, renderProps)
} else {
await next()
}
}