首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加react-hook-form后表单无法工作

添加react-hook-form后表单无法工作
EN

Stack Overflow用户
提问于 2021-04-10 07:49:48
回答 1查看 1.2K关注 0票数 0

在添加react-hook-form以简单地验证表单之后,该字段变为只读。我做错了什么?这是一种网格化的形式。警报正在工作,但我无法写入或发送表单。我正在尝试理解react-hook-form是如何工作的。我必须更改表单的所有逻辑吗?react-hook-form能处理幕后的所有事情吗?

代码语言:javascript
复制
import React, { useState } from 'react'
import { navigate } from 'gatsby'
import { FormWrapper } from './ContactForm.styles'

// import react-hook-form
import { useForm } from 'react-hook-form'

const contact = () => {
  const [formState, setFormState] = useState({
    name: '',
    email: '',
    message: ''
  })

  const encode = data => {
    return Object.keys(data)
      .map(key => encodeURIComponent(key) + '=' + encodeURIComponent(data[key]))
      .join('&')
  }

  const handleChange = e => {
    setFormState({
      ...formState,
      [e.target.name]: e.target.value
    })
  }
  // react-hook form
  const {
    register,
    handleSubmit,
    formState: { errors }
  } = useForm()

  // submit
  const handleRegistration = e => {
    fetch('/', {
      method: 'POST',
      headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
      body: encode({ 'form-name': 'contact', ...formState })
    }).then(() => {
      navigate('/thanks/')
    })
  }

  return (
    <form
      onSubmit={handleSubmit(handleRegistration)}
      name="contact"
      method="POST"
      data-netlify="true"
      data-netlify-honeypot="bot-field"
    >
     
      <FormWrapper>
        <div className="form-name">
          <label htmlFor="name">Name:</label>
          <input
            type="text"
            name="name"
            onChange={handleChange}
            value={formState.name}
            placeholder="your name..."
            id="name"
            // react-hook-form
            aria-invalid={errors.name ? 'true' : 'false'}
            {...register('name', { required: true })}
          />
          // react-hook-form
          {errors.name && <span role="alert">Required</span>}

          <button type="submit">Submit</button>
        </div>
      </FormWrapper>
    </form>
  )
}

export default contact

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-10 15:52:03

根据React Hook Form - Getting Started的说法

代码语言:javascript
复制
import React, { useState } from 'react'
import { navigate } from 'gatsby'
import { FormWrapper } from './ContactForm.styles'

// import react-hook-form
import { useForm } from 'react-hook-form'

const contact = () => {
  
  const encode = data => {
    return Object.keys(data)
      .map(key => encodeURIComponent(key) + '=' + encodeURIComponent(data[key]))
      .join('&')
  }

  // react-hook form
  const {
    register,
    handleSubmit,
    formState: { errors }
  } = useForm()

  // submit
  const handleRegistration = (values) => {
    fetch('/', {
      method: 'POST',
      headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
      body: encode({ 'form-name': 'contact', ...values })
    }).then(() => {
      navigate('/thanks/')
    })
  }

  return (
    <form
      onSubmit={handleSubmit(handleRegistration)}
      data-netlify="true"
      data-netlify-honeypot="bot-field"
    >
     
      <FormWrapper>
        <div className="form-name">
          <label htmlFor="name">Name:</label>
          <input
            type="text"
            placeholder="your name..."
            id="name"
            aria-invalid={errors.name ? 'true' : 'false'}
            {...register('name', { required: true })}
          />
          // react-hook-form
          {errors.name && <span role="alert">Required</span>}

          <button type="submit">Submit</button>
        </div>
      </FormWrapper>
    </form>
  )
}

export default contact

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67029556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档