Записываются данные только из одного инпута React js

120
11 ноября 2021, 01:30

После ввода данных в инпут , в стейт записывается значение "compiled" так же для title , т.е если вводить false то и в title оказывается false , хотя там вводилось другое значение, в чем ошибка?

import React, {Component} from 'react'
import './AddForm.css'
import axios from 'axios';

class AddForm extends Component{
    state = {
        title: '',
        completed: ''
    }
    handleChange = event => {
        this.setState({ title: event.target.value, completed: event.target.value});
    }
    handleSubmit = event => {
        event.preventDefault();

        const API = ''
        axios.put(API, {data: {title: this.state.title, completed: this.state.completed}})
            .then(res => {
                console.log(res);
            })
    }
    render() {
        return (
            <div>
                <form onSubmit={this.handleSubmit}>
                    <label>
                        title:
                        <input type="text" name="title" onChange={this.handleChange} />
                    </label>
                    <label>
                        completed:
                        <input type="text" name="completed" onChange={this.handleChange} />
                    </label>
                    <button type="submit">Add user</button>
                </form>
            </div>
        )
    }
}
export default AddForm
Answer 1

А что по твоему эта строка делает this.setState({ title: event.target.value, completed: event.target.value});? В независимости от того, в какой инпут ты вводишь данные, этот код перезаписывает сразу два поля твоего состояния тем, что ты вводишь в данный момент.

В твоём случае можно сделать во так:

class AddForm extends Component {
  state = {
    title: "",
    completed: ""
  };
  handleChange = event => {
     if (event.target.name === "title")
       this.setState({ title: event.target.value });
     if (event.target.name === "completed")
       this.setState({ completed: event.target.value });
  };
  render() {
    return (
      <div>
        <form onSubmit={this.handleSubmit}>
          <label>
            title:
            <input type="text" name="title" onChange={this.handleChange} />
          </label>
          <label>
            completed:
            <input type="text" name="completed" onChange={this.handleChange} />
          </label>
          <button type="submit">Add user</button>
        </form>
      </div>
    );
  }
}

или для разных инпутов сделать две разные функции.

READ ALSO
Как удалить некоторые слова из текста?

Как удалить некоторые слова из текста?

Ребята, как удалить некоторые слова из текстаЕсть код:

157
Как с помощью Jest или Puppeteer нажать на &quot;ОК&quot; на alert-е?

Как с помощью Jest или Puppeteer нажать на "ОК" на alert-е?

Дело в том, что мой тест Passed, если я вручную нажимаю на "ОК" в алертеА если не нажимаю - он ждет до последнего, а потом Failed, и ругается на Timeout

233
Ошибка в команде yarn install

Ошибка в команде yarn install

Установил Docker Toolbox for Windows 81 В контейнеры через docker-compose установил nginx, php-fpm, php-cli, nodejs Установил symfony 4

203
Сложности в получении стилей нативным JS

Сложности в получении стилей нативным JS

Хочу получить высоту элементаПишу следующим образом:

219