【发布时间】:2016-10-01 11:05:09
【问题描述】:
我正在根据 Dan Abramov 对这个问题的解决方案构建一个基于 Redux 的模型/对话触发器:Dan Abramov's solution
我得到的错误是“Connect(ModalRoot) 中的 mapStateToProps() 必须返回一个普通对象。而是收到未定义的。”
这是模态容器的代码和调用它的代码:
// Code that calls the Modal Container
import React from 'react';
import { Provider } from 'react-redux';
import { Connector as HorizonConnector } from 'horizon-react';
import getMuiTheme from 'material-ui/styles/getMuiTheme';
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import routes from '../routes';
import store from '../store';
import horizon from '../db';
import ModalRoot from './Modal';
export default () => (
<MuiThemeProvider muiTheme={getMuiTheme()}>
<HorizonConnector horizon={horizon} store={store}>
<div className="app">
{routes}
<ModalRoot />
</div>
</HorizonConnector>
</MuiThemeProvider>
);
// The Modal Container
import LoginModal from '../components/Modals/LoginModal'
import {connect} from 'react-redux'
const MODAL_COMPONENTS = {
'LOGIN_MODAL': LoginModal
/* other modals */
}
const ModalRoot = ({ modalType, modalProps }) => {
if (!modalType) {
return <span /> // after React v15 you can return null here
}
const SpecificModal = MODAL_COMPONENTS[modalType]
return <SpecificModal {...modalProps} />
}
export default connect(
state => state.modal
)(ModalRoot)
它可能很简单,我忘记了,但它让我发疯,欢迎任何 cmets 或建议。
【问题讨论】:
-
你检查过 state.modal 确实存在吗?使用 redux 开发工具?
-
感谢您的回复。实际上,它没有。不太确定我应该做什么来创建它。我错过了一步吗?
-
如果您再次查看 Dan 的回答,您将看到您需要创建一个
modalReducer,然后触发被减速器消耗的操作。如果你对 redux 不熟悉,可以试试 Dan 的课程:egghead.io/series/getting-started-with-redux -
这是我的 actionCreators:link
-
这是我的减速器:link 与 combineRecucers 结合使用
标签: javascript reactjs modal-dialog redux react-redux