当前位置: 首页 > 知识库问答 >
问题:

埃斯林特对此表示不满。道具。道具验证中缺少handleSubmit

督瑞
2023-03-14

我有一个组件叫SiteTechnologyForm

class SiteTechnologyForm extends React.Component {

  static propTypes = {
    name: PropTypes.string,
    site_technology_id_number: PropTypes.string,
    common_site: PropTypes.string,
    title: PropTypes.string,
    errors: PropTypes.string
  }

  constructor(props) {
    super(props);

    this.state = {
      logged_in: localStorage.getItem('token') ? true : false,
      name: props.name || '',
      site_technology_id_number: props.site_technology_id_number || '',
      common_site: props.common_site || '',
    };

    this.handleChange = this.handleChange.bind(this);
    this.handleSubmit = this.handleSubmit.bind(this);
  }

  UNSAFE_componentWillMount() {
    if (!this.state.logged_in) {
      browserHistory.push("/accounts/login");
    }
  }

  handleChange(event) {
    if (event.target && event.target.name){
      this.setState({[event.target.name]: event.target.value});
    }
  }

  handleSubmit() {
    let payload = {
      "common_site": this.state.common_site,
      "name": this.state.name,
      "site_technology_id_number": this.state.site_technology_id_number
    };
    this.props.handleSubmit(payload)
  }

  render() {
    const {
      title,
      errors
    } = this.props;

    return !this.state.logged_in ? '' :
      <BaseForm title={title} handleSubmit={this.handleSubmit} errors={errors} data={this.state}>
        <CommonSiteAutocomplete
          label="CommonSite *"
          id="id_common_site"
          required={true}
          inputProps={{
            name: "common_site",
            onChange: this.handleChange,
            value: this.state.common_site,
            required: true
          }}
        />
        <CustomInput
          labelText="Name *"
          id="id_name"
          formControlProps={{
            fullWidth: true
          }}
          inputProps={{
            type: "text",
            onChange: this.handleChange,
            name: "name",
            value: this.state.name,
            required: true
          }}
        />
        <CustomInput
          labelText="Site Technology ID *"
          id="id_site_technology_id_number"
          formControlProps={{
            fullWidth: true
          }}
          inputProps={{
            type: "text",
            onChange: this.handleChange,
            name: "site_technology_id_number",
            value: this.state.site_technology_id_number,
            required: true
          }}
        />
      </BaseForm>
  }
}

ESlint抱怨道具验证中缺少handleSubmit

和SiteTechnologyForm用于其他组件,如下面的addSiteTechnology

class AddSiteTechnology extends React.Component {

  constructor(props) {
    super(props);

    this.state = {
      errors: ''
    };

    this.handleSubmit = this.handleSubmit.bind(this);
  }

  handleSubmit(data) {

    fetch(siteTechUrl, {
      headers: {
        'Content-Type': 'application/json',
        Authorization: `Token ${localStorage.getItem('token')}`
      },
      method: 'POST',
      body: JSON.stringify(data),
    })
      .then(response => {
        if (response.status >= 400) {
          return this.setState({errors: response.statusText});
        }
        browserHistory.push("/site_technologies/list");
      })
  }

  render() {
    return <SiteTechnologyForm title="Add Site Technology" handleSubmit={this.handleSubmit} errors={this.state.errors}/>
  }
}

我最初尝试使用

handleSubmit: PropTypes.function

但是当我尝试运行网页时,我在控制台中遇到了这个错误

检查类型。js:19警告:失败的道具类型:SiteTechnologyForm:道具类型handleSubmit无效;它必须是一个函数,通常来自prop-types包,但收到undefined

如果handleSubmit未通过验证,如何解决这种情况?

共有2个答案

燕富
2023-03-14

您尚未在propTypes声明列表中定义handleSubmit类型,eslint无法找到handleSubmit

handleSubmit定义为这样的function类型,我相信它总是必需的,所以添加isRequired

static propTypes = {
  name: PropTypes.string,
  site_technology_id_number: PropTypes.string,
  common_site: PropTypes.string,
  title: PropTypes.string,
  errors: PropTypes.string,
  handleSubmit: PropTypes.func.isRequired
}

了解有关使用PropTypes进行打字检查的更多信息

顾昌翰
2023-03-14

根据ESLINT,您还需要提供手持提交道具的道具类型。函数类型由func而不是function处理:

handleSubmit: PropTypes.func
 类似资料:
  • 问题内容: 我有下一个代码,随便抛出: 反应/道具类型onClickOut; 道具验证中缺少 反应/道具型儿童;道具验证中缺少 已定义,但eslint无法识别。 package.json .babelrc .eslintrc 问题答案: 问题出在handleClick中的流注释中,我删除了它,并且工作正常,谢谢@alik

  • 问题内容: 当我尝试启动我的React Native应用程序时,我收到此消息。通常,这种格式可在其他多屏幕导航上使用,但在这种情况下不起作用。 这是错误: 这是我的应用格式: 问题答案: React Navigation 3.0进行了许多重大更改,包括根导航器所需的显式应用程序容器。 过去,任何导航器都可以充当应用程序顶层的导航容器,因为它们都包裹在“导航容器”中。导航容器(现在称为应用程序容器)

  • 我是React的初学者,所以请对我有耐心。) 我有一个父组件,它有两个不同的按钮,可以触发子组件,子组件是一个模态,根据哪个按钮触发了模态,子组件内部必须显示不同的内容。这两个组件都是功能组件。子模式应该通过道具从父模式接收触发按钮的值。该按钮的名称是一个数字,对应于子组件中定义的数组中的对象索引。 当我安慰的时候。记录道具,我看到它们被传递到模态三次。第一次按钮的值确实通过道具传递,但在第二段和

  • 在我的react/redux应用程序中,每次安装组件时,我都会调用一个操作从redux中的状态检索数据。我的方法行不通 下面是我得到的错误: React Hook use效应有一个缺失的依赖项:道具。要么包含它,要么删除依赖数组。然而,当任何道具发生变化时,“道具”都会发生变化,因此首选的修复方法是将“道具”对象的结构分解为在use效应调用之外的对象,并指称在use效应反应挂钩/穷举deps中的那

  • 我正在做一个React项目,其中有一个名为。整个项目运行得很好,但是,我得到了一个控制台错误,显示。 完全错误消息 警告:失败的道具类型:货币内容提供者:道具类型无效;它必须是一个函数,通常来自包,但收到。这种情况经常发生是因为诸如而不是这样的错别字。 有关更多说明,请参见。如果有什么不清楚的地方,请告诉我。

  • 我在为我们的反应原生项目写组件 我从道具类型中得到这个错误 “警告:失败的道具类型:提供给