我最近弹出了我的create-react-app,我收到ReduxForm的错误,阻止了webpack编译.这是错误:“错误’NewComplaintModal’是一个类no-class-assign”.它似乎与底部的redux表单装饰器相关联,但我在redux-form文
import React, { Component } from 'react'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; import * as Actions from '../actions'; import { Field, reduxForm } from 'redux-form'; import DatePicker from "react-bootstrap-date-picker"; class NewComplaintModal extends Component { close() { this.props.actions.hideModal(); } handleFormSubmit(formProps) { this.props.actions.submitComplaint(formProps); } render(){ const { handleSubmit } = this.props; const show = this.props.modalType ? true : false; const RenderDatePicker = ({input, meta: {touched, error} }) => ( <div> <DatePicker showClearButton={false} {...input} /> {touched && error && <span>{error}</span>} </div> ); return( <div> ... </div> ) } } NewComplaintModal = reduxForm({ form: 'newComplaintModal' })(NewComplaintModal); function mapStateToProps(state) { return { modal: state.modal }; } function mapDispatchToProps(dispatch) { return { actions: bindActionCreators(Actions, dispatch) }; } export default connect(mapStateToProps, mapDispatchToProps)(NewComplaintModal)首先,你要声明一个名为NewComplaintModal的类
class NewComplaintModal extends Component { ... }
然后,你正在处理你的NewComplaintModal,这是一个类声明,就像它是一个变量,如下所示:
NewComplaintModal = reduxForm({ form: 'newComplaintModal' })(NewComplaintModal);
这就是为什么你会看到特定的错误,即抱怨正在重新分配一个类.要解决这个问题,我建议在连接之前跳过使用reduxForm装饰器的中间步骤,并使用装饰器语法链接它们:
import React, { Component } from 'react'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; import * as Actions from '../actions'; import { Field, reduxForm } from 'redux-form'; import DatePicker from "react-bootstrap-date-picker"; export class NewComplaintModal extends Component { close() { this.props.actions.hideModal(); } handleFormSubmit(formProps) { this.props.actions.submitComplaint(formProps); } render(){ const { handleSubmit } = this.props; const show = this.props.modalType ? true : false; const RenderDatePicker = ({input, meta: {touched, error} }) => ( <div> <DatePicker showClearButton={false} {...input} /> {touched && error && <span>{error}</span>} </div> ); return( <div> ... </div> ) } } function mapStateToProps(state) { return { modal: state.modal }; } function mapDispatchToProps(dispatch) { return { actions: bindActionCreators(Actions, dispatch) }; } // use decorators around an extension of your component // to plug into redux and redux-form @connect(mapStateToProps, mapDispatchToProps) @reduxForm({ form: 'newComplaintModal' }) export default class NewComplaintModalContainer extends NewComplaintModal {}
如果您不想使用装饰器语法,可以执行以下操作:
export default connect(mapStateToProps, mapDispatchToProps)( reduxForm({ form: 'newComplaintModal' })( NewComplaintModal ) )
这种方法基本上将组件与类似配置的元素隔离开来,即与应用程序状态交互相关的任何内容.
希望这可以帮助!