Я разрабатываю приложение на стороне сервера, обработанное с помощью ответной реакции. Все работает нормально, но у меня есть проблема, которая заключается в том, что требуется время для рендеринга CSS при первой загрузке (только загрузка контента через html.a после секундной загрузки CSS). Я пытался Изоморфный стиль-загрузчик .
Client.js
import './../../node_modules/bootstrap/dist/css/bootstrap.css';
import './styles/css/main.css';
const initialState = fromJS(window.__INITIAL_STATE__) ;
const Store = createStore(
reducers,
initialState,
applyMiddleware(thunk.withExtraArgument(axiosInstance))
);
hydrate(
<Provider store={Store}>
<BrowserRouter>
<div>
{renderRoutes(Routes)}
<Footer/>
</div>
</BrowserRouter>
</Provider>,
document.querySelector('#root')
);
Server.js
import renderer from './helpers/renderer';
const app = express();
app.use(express.static('public'));
app.use(bodyParser.urlencoded({
extended: true
}));
app.get('*', (req, res) => {
const store = createStore(req);
const promises = matchRoutes(Routes, req.path)
.map(({ route, match }) => {
var parts = req.path.split("/");
var lastSegment = parts.pop() || parts.pop();
return route.loadData ? route.loadData(store, lastSegment) : null;
})
.map(promise => {
if (promise) {
return new Promise((resolve, reject) => {
promise.then(resolve).catch(resolve);
});
}
});
Promise.all(promises).then(() => {
const context = {};
const content = renderer(req, store, context);
if (context.url) {
return res.redirect(301, context.url);
}
if (context.notFound) {
res.status(404);
}
res.send(content);
});
});
app.listen(SERVER_PORT, () => {
console.log('Listening on port '+SERVER_PORT);
});
Renderer.js
Я попытался загрузить весь файл css из rendere.js.но, но это не помогло, и html часть тела исчезла при перезагрузке страницы.
export default (req, store, context) => {
const content = renderToString(
<Provider store={store} >
<StaticRouter location={req.path} context={context}>
<div>{renderRoutes(Routes)}</div>
</StaticRouter>
</Provider>
);
const helmet = Helmet.renderStatic();
return `<!doctype html>
<html lang="en">
<head>
<link rel="shortcut icon" href="fav.png">
<meta name="viewport" content="width=device-width, initial-scale=1">
${helmet.title.toString()}
${helmet.meta.toString()}
</head>
<body>
<base href="/" />
<div id="root">${content.toString()}</div>
<script>
window.INITIAL_STATE = ${serialize(store.getState())}
</script>
<script src="bundle.js"></script>
</body>
</html>
`;
};