我最近弹出了我的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
)
)
这种方法基本上将组件与类似配置的元素隔离开来,即与应用程序状态交互相关的任何内容.
希望这可以帮助!
