Reactjs Redux/React HMR<;供应商>;错误
我正在尝试在Redux计数器示例(移植到typescript)上使用react hot loader v3设置HMR HMR实际上似乎是有效的,因为页面会更新,但第一次更新总是抛出Reactjs Redux/React HMR<;供应商>;错误,reactjs,redux,react-redux,typescript2.0,hot-module-replacement,Reactjs,Redux,React Redux,Typescript2.0,Hot Module Replacement,我正在尝试在Redux计数器示例(移植到typescript)上使用react hot loader v3设置HMR HMR实际上似乎是有效的,因为页面会更新,但第一次更新总是抛出warning.js?8f69:14不支持动态更改'store'。您很可能会看到此错误,因为您已更新到Redux 2.x和React Redux 2.x,不再自动热加载减速器。看见https://github.com/reactjs/react-redux/releases/tag/v2.0.0 查看迁移说明。 奇怪的
warning.js?8f69:14不支持动态更改'store'。您很可能会看到此错误,因为您已更新到Redux 2.x和React Redux 2.x,不再自动热加载减速器。看见https://github.com/reactjs/react-redux/releases/tag/v2.0.0 查看迁移说明。
奇怪的是,在我重新加载页面之前,后续更新不会抛出这个(并继续工作)
我相信我已经按照医生说的方式安排好了,我不明白为什么会发生这种情况。我希望有人会遇到这个
index.ts
const store: Store<IAppState> = configureStore();
const rootEl = document.getElementById('root');
let render = () => {
ReactDOM.render(
<AppContainer>
<Root store={ store }/>
</AppContainer>,
rootEl
);
};
if (process.env.NODE_ENV !== 'production') {
if ((module as any).hot) {
(module as any).hot.accept(() => {
setTimeout(render);
});
}
}
render();
let Root = (process.env.NODE_ENV === 'production') ?
RootProd :
RootDev;
export default Root;
export default class RootDev extends React.Component<IRootProps, void> {
render() {
const { store } = this.props;
return (
<Provider store={store}>
<div>
<CounterApp />
<DevTools />
</div>
</Provider>
);
}
}
let configureStore = (process.env.NODE_ENV === 'production') ?
configureStoreProd :
configureStoreDev;
export default configureStore;
const composeEnhancers = (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const enhancer = composeEnhancers(
applyMiddleware(thunk.default),
DevTools.instrument(),
persistState(
window.location.href.match(/[?&]debug_session=([^&#]+)\b/) ?
window.location.href.match(/[?&]debug_session=([^&#]+)\b/)[0] :
'defaultDevSession'
)
);
export default function configureStoreDev():Store<IAppState> {
const store = createStore<IAppState>(rootReducer, enhancer);
if ((<any>module).hot) {
(<any>module).hot.accept('../reducers', () => {
console.log('replaceReducer');
store.replaceReducer(require('../reducers').rootReducer)
});
}
return store;
}
root.dev.ts
const store: Store<IAppState> = configureStore();
const rootEl = document.getElementById('root');
let render = () => {
ReactDOM.render(
<AppContainer>
<Root store={ store }/>
</AppContainer>,
rootEl
);
};
if (process.env.NODE_ENV !== 'production') {
if ((module as any).hot) {
(module as any).hot.accept(() => {
setTimeout(render);
});
}
}
render();
let Root = (process.env.NODE_ENV === 'production') ?
RootProd :
RootDev;
export default Root;
export default class RootDev extends React.Component<IRootProps, void> {
render() {
const { store } = this.props;
return (
<Provider store={store}>
<div>
<CounterApp />
<DevTools />
</div>
</Provider>
);
}
}
let configureStore = (process.env.NODE_ENV === 'production') ?
configureStoreProd :
configureStoreDev;
export default configureStore;
const composeEnhancers = (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const enhancer = composeEnhancers(
applyMiddleware(thunk.default),
DevTools.instrument(),
persistState(
window.location.href.match(/[?&]debug_session=([^&#]+)\b/) ?
window.location.href.match(/[?&]debug_session=([^&#]+)\b/)[0] :
'defaultDevSession'
)
);
export default function configureStoreDev():Store<IAppState> {
const store = createStore<IAppState>(rootReducer, enhancer);
if ((<any>module).hot) {
(<any>module).hot.accept('../reducers', () => {
console.log('replaceReducer');
store.replaceReducer(require('../reducers').rootReducer)
});
}
return store;
}
configureStore.dev.ts
const store: Store<IAppState> = configureStore();
const rootEl = document.getElementById('root');
let render = () => {
ReactDOM.render(
<AppContainer>
<Root store={ store }/>
</AppContainer>,
rootEl
);
};
if (process.env.NODE_ENV !== 'production') {
if ((module as any).hot) {
(module as any).hot.accept(() => {
setTimeout(render);
});
}
}
render();
let Root = (process.env.NODE_ENV === 'production') ?
RootProd :
RootDev;
export default Root;
export default class RootDev extends React.Component<IRootProps, void> {
render() {
const { store } = this.props;
return (
<Provider store={store}>
<div>
<CounterApp />
<DevTools />
</div>
</Provider>
);
}
}
let configureStore = (process.env.NODE_ENV === 'production') ?
configureStoreProd :
configureStoreDev;
export default configureStore;
const composeEnhancers = (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const enhancer = composeEnhancers(
applyMiddleware(thunk.default),
DevTools.instrument(),
persistState(
window.location.href.match(/[?&]debug_session=([^&#]+)\b/) ?
window.location.href.match(/[?&]debug_session=([^&#]+)\b/)[0] :
'defaultDevSession'
)
);
export default function configureStoreDev():Store<IAppState> {
const store = createStore<IAppState>(rootReducer, enhancer);
if ((<any>module).hot) {
(<any>module).hot.accept('../reducers', () => {
console.log('replaceReducer');
store.replaceReducer(require('../reducers').rootReducer)
});
}
return store;
}
const composeEnhancers=(如有窗口)。\uuuu REDUX\u DEVTOOLS\u EXTENSION\uuuuu| | COMPOSE;
常量增强子=复合增强子(
applyMiddleware(thunk.default),
DevTools.instrument(),
持续状态(
window.location.href.match(/[?&]debug#u session=([^]+)\b/)?
window.location.href.match(/[?&]debug#u session=([^]+)\b/)[0]:
“defaultDevSession”
)
);
导出默认函数configureStoreDev():存储{
const store=createStore(rootReducer、enhancer);
如果((我查看了项目代码库,没有找到启动它的脚本。我如何运行它?我实际上已经修复了它,但如果你想尝试它..cd然后npm安装&&&&&./node_modules/.bin/webpack--config./webpack.server.js&&node dist/server.js
@XeroxDucati你能分享你最后做了什么来修复这个问题吗?运行我自己做了这件事,但不清楚您是如何从源代码处修复它的。@Krustal我在createStore中做了这件事:const store=createStore(require('../reducers').rootReducer,enhancer);/*istanbul ignore next*/if((module.hot){(module.hot.accept('../reducers'),()=>{store.replaceReducer(require('../reducers').rootReducer);});}@XeroxDucati感谢分享这绝对是解决方案。我很好奇如何做到这一点,并且仍然将initialState作为第二个参数传递,因为这似乎是我问题的根源。如果您将上述内容作为答案发布,我将很高兴提供追加投票。我查看了项目代码库,但没有找到启动它的脚本。我如何才能运行它?我确实修复了它,但如果你想尝试它..cd然后npm安装&&&./node_modules/.bin/webpack--config./webpack.server.js&&node dist/server.js
@XeroxDucati你能分享一下你最终做了什么来修复这个问题吗?我自己遇到了这个问题,而且你从源头上做了什么还不清楚。@Kr我在createStore中这样做了:const store=createStore(require('../reducers').rootReducer,enhancer);/*innext*/if((module.hot){(module.hot.accept('../reducers'),()=>{store.replaceReducer(require('../reducers').rootReducer);});}@施乐杜卡迪感谢您分享这绝对是解决方案。我很好奇如何做到这一点,并仍然通过initialState作为第二个参数,因为这似乎是我的问题的根源。如果您发布上述作为一个答案,我很乐意提供支持投票。