【发布时间】:2018-11-21 09:43:24
【问题描述】:
我第一次使用 typescript 为 redux 设置商店时出错。
错误信息如下:
元素类型无效:应为字符串(对于内置组件)或类/函数(对于复合组件),但得到:未定义。您可能忘记从定义组件的文件中导出组件,或者您可能混淆了默认导入和命名导入。
11 | // tslint:disable-next-line 12 | const store = configureStore(undefined); 13 | > 14 | render( 15 | <Provider store={store}> 16 | <ConnectedRouter history={createHistory()}> 17 | <App />
import * as React from 'react';
import {render} from 'react-dom';
import {ConnectedRouter} from 'react-router-redux';
import {Provider} from 'react-redux';
import configureStore from './store/configureStore';
import createHistory from 'history/createBrowserHistory';
import App from './App';
import './styles/styles.css';
// tslint:disable-next-line
const store = configureStore(undefined);
render(
<Provider store={store}>
<ConnectedRouter history={createHistory()}>
<App />
</ConnectedRouter>
</Provider>,
document.getElementById('root') as HTMLElement
);
我的配置存储:
import {createStore} from 'redux';
import rootReducer from '../reducers';
interface WindowModuleHot extends Window {
module: {
hot: {
accept: (path: string, callback: () => void) => void;
};
};
}
export default function configureStore(initialState: any) {
const store = createStore(rootReducer, initialState);
const hotWindow = window as WindowModuleHot;
if (hotWindow.module && hotWindow.module.hot) {
// Enable Webpack hot module replacement for reducers
hotWindow.module.hot.accept('../reducers', () => {
const nextReducer = require('../reducers');
store.replaceReducer(nextReducer);
});
}
return store;
}
【问题讨论】:
-
您在哪一行得到错误?
-
我已添加到帖子中。谢谢
-
检查您的进口商品之一是否也被导出
-
为什么未定义传递给configureStore?
-
@Rahamin 也不确定,但这对github.com/coryhouse/react-slingshot 有效。我一直在建造类似的东西。我检查了所有导出,当我删除
ConnectedRouter history={createHistory()}时应用程序运行
标签: reactjs typescript redux