Javascript 在状态更新时响应刷新并非所有元素
你好! 也许这个问题不好,但我找不到答案。 我有一个React应用程序,它面向json对象,从外部动态变化 来自导航的代码:Javascript 在状态更新时响应刷新并非所有元素,javascript,reactjs,webpack,react-router,react-hot-loader,Javascript,Reactjs,Webpack,React Router,React Hot Loader,你好! 也许这个问题不好,但我找不到答案。 我有一个React应用程序,它面向json对象,从外部动态变化 来自导航的代码: import MultiTable from '../multi'; import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider'; import Clock from '../clock' let routes = [ { exact: true,
import MultiTable from '../multi';
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import Clock from '../clock'
let routes = [
{
exact: true,
path: '/Main',
main: () => <Main />
},
{
path: '/MultiTable',
main: () => <MultiClock />
}
];
function requireAll(requireContext) {
return requireContext.keys().map(requireContext);
}
const Configs = requireAll(require.context('../../../src/configs', false, /.json$/));
const Files = requireAll(require.context('../../../src/data', false, /.json$/));
const Multi = () => (
<MuiThemeProvider>
<MultiTable allData={[Files, Configs]}/>
</MuiThemeProvider>
);
const MultiClock = () => (
<div>
<Clock/>
<Multi/>
</div>
);
export default class Nav extends React.Component {
render() {
return (
<Router history='vah'>
<div style={{display: 'flex'}} ref="nav">
<Drawer
docked={true}
width={200}
>
<Link to='/Main' key="main">Main</Link>
<Link to='/MultiTable' key="multi">WithClock</Link>
</Drawer>
<div style={{flex: 1}}>
{routes.map((route, index) => (
<Route
key={index}
path={route.path}
exact={route.exact}
component={route.main}
/>
))}
</div>
</div>
</Router>
);
}
}
{
"presets": [
["es2015", {"modules": false}],
"stage-2",
"react"
],
"plugins": [
"react-hot-loader/babel"
]
}
在.babelrc中:
import MultiTable from '../multi';
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import Clock from '../clock'
let routes = [
{
exact: true,
path: '/Main',
main: () => <Main />
},
{
path: '/MultiTable',
main: () => <MultiClock />
}
];
function requireAll(requireContext) {
return requireContext.keys().map(requireContext);
}
const Configs = requireAll(require.context('../../../src/configs', false, /.json$/));
const Files = requireAll(require.context('../../../src/data', false, /.json$/));
const Multi = () => (
<MuiThemeProvider>
<MultiTable allData={[Files, Configs]}/>
</MuiThemeProvider>
);
const MultiClock = () => (
<div>
<Clock/>
<Multi/>
</div>
);
export default class Nav extends React.Component {
render() {
return (
<Router history='vah'>
<div style={{display: 'flex'}} ref="nav">
<Drawer
docked={true}
width={200}
>
<Link to='/Main' key="main">Main</Link>
<Link to='/MultiTable' key="multi">WithClock</Link>
</Drawer>
<div style={{flex: 1}}>
{routes.map((route, index) => (
<Route
key={index}
path={route.path}
exact={route.exact}
component={route.main}
/>
))}
</div>
</div>
</Router>
);
}
}
{
"presets": [
["es2015", {"modules": false}],
"stage-2",
"react"
],
"plugins": [
"react-hot-loader/babel"
]
}
主条目/app/index.js:
const path = require('path');
const webpack = require('webpack');
module.exports = {
entry: [
'babel-polyfill',
'react-hot-loader/patch',
'webpack-dev-server/client?http://192.168.1.33:3000',
'webpack/hot/only-dev-server',
'./app/index.js'
],
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, '../dist'),
publicPath: '/static/'
},
module: {
rules: [
{test: /\.jsx?$/, use: ['babel-loader'], exclude: /node_modules/},
{test: /\.(less|css)$/, loader: 'style-loader!css-loader!less-loader'},
{test: /\.(xml)$/, loader: 'xml-loader'},
{test: /\.(svg|png|jpg|jpeg|gif|ico|eot|otf|ttf|woff|woff2)$/, loader: 'file-loader'}
],
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new webpack.NamedModulesPlugin(),
new webpack.NoEmitOnErrorsPlugin(),
],
devServer: {
host: '192.168.1.33',
port: 3000,
historyApiFallback: true,
hot: true,
compress: true
}
};
import React from 'react';
import ReactDOM from 'react-dom'
import {AppContainer} from 'react-hot-loader'
import injectTapEventPlugin from 'react-tap-event-plugin';
injectTapEventPlugin();
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import Nav from './navigation/nav';
import './index.less';
const rootEl = document.getElementById('root');
const render = Component => {
ReactDOM.render(
<AppContainer>
<MuiThemeProvider>
<Component />
</MuiThemeProvider>
</AppContainer>,
rootEl
)
};
render(Nav);
if (module.hot) {
module.hot.accept('./navigation/nav', () => {
render(Nav)
})
}
从“React”导入React;
从“react dom”导入react dom
从“react hot loader”导入{AppContainer}
从“react-tap事件插件”导入injectTapEventPlugin;
injectTapEventPlugin();
从“材质ui/styles/MuiThemeProvider”导入MuiThemeProvider;
从“./navigation/Nav”导入导航;
导入“./index.less”;
const rootEl=document.getElementById('root');
常量呈现=组件=>{
ReactDOM.render(
,
罗特尔
)
};
渲染(导航);
如果(模块热){
module.hot.accept('./导航/导航',()=>{
渲染(导航)
})
}
也许我真的在配置中犯了一些错误,并且没有完全理解这些技术必须如何工作。热加载程序+网页包+路由器您的问题仍然不太清楚,特别是这部分:
时钟-当文件或配置中的某些内容发生更改时-时钟也会刷新。
您到底想要什么行为?@NagarajTantri添加了gif示例来说明它的外观。和更新问题您能提供使用webpack热重新加载的过程吗?我的意思是,您是否使用了webpack热重新加载的CLI或使用了配置文件来执行此操作?还向我们展示了网页包配置。如果您可以提供一个示例github项目,那就更好了,因为这个问题很特殊,需要理解webpack热重新加载/webpackconfigs@NagarajTantri,用我的代码填充了问题(很抱歉,无法提供github项目)。正如你所看到的,我正在使用手工制作的网页配置。我想我的路由可能有问题吗?基本错误报告,如果你可以在chrome中检查你的开发控制台:你的问题仍然不是很清楚,特别是这部分:Clock-当文件或配置中的某些内容发生更改时-Clock也会刷新。
你到底想要什么行为?@NagarajTantri添加了一个gif示例来说明它的外观。和更新问题您能提供使用webpack热重新加载的过程吗?我的意思是,您是否使用了webpack热重新加载的CLI或使用了配置文件来执行此操作?还向我们展示了网页包配置。如果您可以提供一个示例github项目,那就更好了,因为这个问题很特殊,需要理解webpack热重新加载/webpackconfigs@NagarajTantri,用我的代码填充了问题(很抱歉,无法提供github项目)。正如你所看到的,我正在使用手工制作的网页配置。我想我的路由可能有问题?基本错误报告,如果您可以在chrome中检查您的开发控制台: