Node.js 从NodeJS服务器设置同构react redux应用程序中存储的初始状态(我正在使用react路由器)
我正在尝试从NodeJS服务器设置redux存储的初始状态。我不确定我错过了什么,以及如何让它发挥作用 这是我的server.jsNode.js 从NodeJS服务器设置同构react redux应用程序中存储的初始状态(我正在使用react路由器),node.js,reactjs,redux,react-router,react-redux,Node.js,Reactjs,Redux,React Router,React Redux,我正在尝试从NodeJS服务器设置redux存储的初始状态。我不确定我错过了什么,以及如何让它发挥作用 这是我的server.js const express = require('express'); const path = require('path'); const webpack = require('webpack'); const webpackDevMiddleware = require('webpack-dev-middleware'); const webpackHotMi
const express = require('express');
const path = require('path');
const webpack = require('webpack');
const webpackDevMiddleware = require('webpack-dev-middleware');
const webpackHotMiddleware = require('webpack-hot-middleware');
const webpackHotServerMiddleware = require('webpack-hot-server-middleware');
const config = require('./webpack/webpack.development.config.js');
const compiler = webpack(config);
const app = express();
app.use(webpackHotMiddleware(compiler.compilers.find(
compiler => compiler.name === 'client'
)));
app.use(webpackHotServerMiddleware(compiler));
app.listen(3000);
这是我的webpack.development.config
const path = require('path');
module.exports = [
{
name: 'client',
target: 'web',
entry: './routes/client.jsx',
output: {
path: path.join(__dirname, 'assets'),
filename: 'client.js',
publicPath: '/assets/',
},
resolve: {
extensions: ['.js', '.jsx']
},
devtool: 'source-map',
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /(node_modules\/)/,
use: [
{
loader: 'babel-loader',
}
]
},
{
test: /\.scss$/,
use: [
{
loader: 'style-loader',
},
{
loader: 'css-loader',
options: {
modules: true,
importLoaders: 1,
localIdentName: '[name]__[local]___[hash:base64:5]',
sourceMap: true
}
},
{
loader: 'sass-loader'
}
]
},
{ test: /\.html$/, loader: "html-loader" }
],
},
},
];
另外,服务器上也有相同的模块,但我删除了这些模块,以保持简短
这是client.jsx
import React from 'react';
import { createStore } from 'redux'
import ReactDOM from 'react-dom';
import { BrowserRouter } from 'react-router-dom';
import Routes from './routes.jsx';
import { Provider } from 'react-redux';
import MainStore from '../views/store/MainStore';
import home from './home';
const store = createStore(MainStore, "Name");
ReactDOM.render((
<Provider store={store}>
<BrowserRouter>
<Routes />
</BrowserRouter>
</Provider>
), document.getElementById('root'));
我想将const name从home.jsx导入client.jsx,并将存储的初始值设置为这个导入值。我可以通过线路手动完成
const store = createStore(MainStore, "Name");
在client.jsx中。但我不想使用“Name”作为字符串,而是想用home.jsx中的常量值替换它
有什么建议吗
在同构react redux应用程序中设置存储的初始状态
假定任务的典型解决方案是使用预加载状态,预加载状态在SSR阶段计算,并作为序列化信息字段注入呈现的HTML模板中。您还可以创建专用资源,如/api/initialState.js
,它根据客户端请求和JWT凭据为视图模型创建初始状态
您可以在中看到类似的解决方案,它为服务器上的redux提供了全自动同构存储功能,包括SSR。Try
const store=createStore(MainStore,home.name)代码>@JeffF。我已经尝试过了,当我在client.jsx中包含“import home from./home';”时,我的Web包编译失败了,因为我收到了诸如无法解析'fs'/'modules'之类的消息,许多这样的消息无法解析节点模块文件中的消息。由于它们被排除在webpack中,我假设我正在进行一些不正确的导入。我在同构方面没有太多经验,但似乎您的客户端代码正在尝试导入您的服务器端代码,这自然不起作用。“fs”模块与客户端无法访问的文件系统相关。@jeff。这就解释了为什么client.jsx中的“import home from./home';”会破坏应用程序。你能推荐我从NodeJS设置redux存储的其他方法吗?
const store = createStore(MainStore, "Name");