当前位置 : 主页 > 网页制作 > React >

reactjs – ReduxForm装饰器,弹出create-react-app后没有类分配错误

来源:互联网 收集:自由互联 发布时间:2021-06-15
我最近弹出了我的create-react-app,我收到ReduxForm的错误,阻止了webpack编译.这是错误:“错误’NewComplaintModal’是一个类no-class-assign”.它似乎与底部的redux表单装饰器相关联,但我在redux-form文
我最近弹出了我的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
  )
)

这种方法基本上将组件与类似配置的元素隔离开来,即与应用程序状态交互相关的任何内容.

希望这可以帮助!

网友评论