Arhn - архитектура программирования

Функция React form onSubmit не вызывается

У меня есть форма на моей странице с функцией onSubmit, которую я хочу вызвать, но, похоже, она не запускается, поскольку console.log никогда не появляется.

import React, { Component } from 'react'

class EmailSignUp extends Component {
  constructor(props) {
    super(props)
      this.state = {
        email: '',
        lastName: '',
        error: false
      }

      this.handleChange = this.handleChange.bind(this)
      this.onSubmitForm = this.onSubmitForm.bind(this)
   }

  onSubmitForm (e) {
    console.log('function has run');
    e.preventDefault()
    let formData = new FormData(e)
    const { formAction } = this.props

    const requestOptions = {
      method: 'POST',
      body: formData
    }

    fetch(formAction, requestOptions)
      .then(response => response.text())
      .then(result => console.log(result))
      .catch(error => console.log('error', error))
  }

  handleChange (e) {
    const value = e.target.value
    const inputId = e.target.id
    this.setState(() => ({
      [inputId]: value
    }))
  }

  render () {
    const { error } = this.state

    return (
      <div id='email-form' className='container'>
          <form
            name='form'
            id='form'
            onSubmit={this.onSubmitForm}
            method='post'
          >
            <div className='form-group'>
              <label htmlFor='email'>Email</label>
              <input
                type='email'
                name='Email'
                className='form-control'
                id='email'
                placeholder='[email protected]'
                onChange={this.handleChange}
                value={this.state.email}
                required
              />
            </div>
            <div className='form-group'>
              <label htmlFor='lastName'>Last name</label>
              <input
                type='text'
                name='lastName'
                className='text form-control'
                id='lastName'
                placeholder='Last Name'
                onChange={this.handleChange}
                value={this.state.lastName}
                required
              />
            </div>
            <button
              type='submit'
              name='Submit'
              value='Subscribe'
              className='btn btn-primary item_cta'
              readOnly
            />
          </form>
          {error && <p>{error}</p>}
        </div>
    )
  }
}

export default EmailSignUp

  • убери method из формы, а еще почему у тебя readOnly на кнопке? 29.09.2020
  • если я удалю метод, он все равно не запустится и перейдет к URL-адресу со всеми данными формы в виде запроса? как www.test.com?email=&lastname= 29.09.2020
  • Вы просмотрели ошибки консоли? Понятно, что это проблема с тем, как вы пытаетесь использовать FormData Failed to construct 'FormData': parameter 1 is not of type 'HTMLFormElement'.: stackblitz.com/edit/react-et2my9?file=src/Form.js 29.09.2020

Ответы:


1

Запуск вашего кода приводит к ошибке 'Failed to construct 'FormData': parameter 1 is not of type 'HTMLFormElement'. Фактический элемент формы будет на target события отправки. Попробуйте сделать следующее, обновив e до e.target:

let formData = new FormData(e.target);
const { formAction } = this.props;

Также удалите method из элемента form. Кроме того, удалите readOnly из button. Он не предназначен для того, чтобы быть самозакрывающимся элементом, таким как br:

<button
  type="submit"
  name="Submit"
  value="Subscribe"
  className="btn btn-primary item_cta"
 >submit</button>

Надеюсь, это поможет!

29.09.2020
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..