Условное обновление значения React Json

Я не понял, как редактировать данные JSON из запроса Put (это должен быть запрос PUT)

Я создал некоторые входные данные, как вы видите, и мне нужно найти способ обновления/добавления новых кредитно-дебетовых данных для данных JSON, различающихся «до» и «от».

Кроме того, если добавлено значение «до», оно должно быть уменьшено от общего баланса, а если добавлено значение «от», оно должно быть добавлено к общему балансу.

Я создал поле выбора и ввод для этого (не соединял json и компонент) Мой компонент Updater выглядит следующим образом:

Сам компонент:

import React, { Component } from 'react';
import './Updater.scss';
import Axios from 'axios';


export default class Updater extends Component {
    constructor(){
        super();
        this.state = {
            amount: '',
            description: '',
            from: '',
            to: '',
            date: new Date()
        }
    }


    onSubmitEdit = () => {
        Axios.put('http://localhost:8080/api/balance/add', 
        {});
    }

    render() {

        return (
            <div className = "updatercontainer">
                <div className = "updaterinputs">
                 <input className = "amount" name = "amount"  
                    type = "text" placeholder = "Enter Amount"/>
                 <input className = "description" name = "description" 
                    type = "text" placeholder = "Enter Description"/>
                </div>
            <div className = "selectbox">
            <select>
                <option value = "From">From</option>
                <option value = "To">To</option>
            </select>
                <input className = "fromto" type = "text"
                 name = "fromto" placeholder = "Enter From or To Name"/>
            </div>
            <div className = "selectboxcontainer">

                <div className = "button-container">
                 <a href = "#" onClick = {this.onSubmitEdit} 
                 className = "button amount-submit">
                <span></span>Update</a>
                </div>

            </div>

        </div>
        )
    }
}

вам нужно передать данные для отправки на сервер во втором аргументе запроса на размещение. сохранить значение каждого входа в локальном состоянии

John Ruddell 06.06.2019 00:37
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
1
222
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

вам просто нужно событие onChange для обновления состояния на основе имени входных значений

handleChangeEvent = (e) => {
   this.setState({ [e.target.name]: e.target.value })
}

//On your inputs
<input 
    className = "amount" 
    name = "amount" 
    type = "text" 
    placeholder = "Enter Amount"
    value = {this.state.amount}
    onChange = {() => this.handleChangeEvent(e)}
/>

вы захотите передать состояние в качестве второго параметра для вашего запроса PUT, как сказал Джон выше.

Taylor Belk 06.06.2019 00:43
Ответ принят как подходящий
class Updater extends React.Component {
  constructor() {
    super();
    this.state = {
      amount: 0,
      description: "",
      _from: true,
      _to: false,
      date: new Date()
    };
  }

  onAmountChange = e => {
    this.setState({
      amount: e.target.value
    });
  };
  onDescriptionChange = e => {
    this.setState({
      description: e.target.value
    });
  };
  onSelectTypeChange = e => {
    console.info(e.target.value);
    this.setState({
      [e.target.value === "from" ? "_from" : "_to"]: true,
      [e.target.value !== "from" ? "_from" : "_to"]: false
    });
    if (e.target.value !== "from" && (this.state.from != null || this.state.from !== "")) { 
      this.setState({
        to: this.state.from,
        from: null
      });
    } else if (e.target.value === "from" && (this.state.to != null || this.state.to !== "")){
      this.setState({
        from: this.state.to,
        to: null
      });
    }
  };
  onFromToChange = (e) => {
    this.setState({
       [this.state._from ? "from" : "to"]: e.target.value
    });
  }
  onSubmitEdit = () => {
    Axios.put(
      "https://httpbin.org/put",
      {
        ...this.state,  
      },
      { headers: { "Content-Type": "application/json" } }
    )
      .then(response => {
        // handle Response
      })
      .catch(err => {
        // handle Error
      });
  };

  render() {
    return (
      <div className = "updatercontainer">
        <div className = "updaterinputs">
          <input
            onChange = {this.onAmountChange}
            className = "amount"
            name = "amount"
            type = "text"
            placeholder = "Enter Amount"
          />
          <input
            onChange = {this.onDescriptionChange}
            className = "description"
            name = "description"
            type = "text"
            placeholder = "Enter Description"
          />
        </div>
        <div className = "selectbox">
          <select onChange = {this.onSelectTypeChange}>
            <option value = "from">From</option>
            <option value = "to">To</option>
          </select>
          <input onChange = {this.onFromToChange} className = "fromto" type = "text"
               name = "fromto" placeholder = "Enter From or To Name"/>
        </div>
        <div className = "selectboxcontainer">
          <div onClick = {this.onSubmitEdit} className = "button-container">
            <a href = "#" className = "button amount-submit">
              <span>Update</span>
            </a>
          </div>
        </div>
      </div>
    );
  }
}

Подумайте о том, чтобы узнать больше о Обработка входных данных, форм, событий

Рабочая песочница!

Спасибо большое. Но одну вещь я нашел. Я думаю, вы удалили ввод "fromto". Но, как вы можете видеть в данных JSON, значение из ввода «fromto» переходит в «from» или «to» в зависимости от вашего выбора в поле выбора. Это была самая сложная часть для меня, я даже не думал о логике. У вас есть представление об этом?

Nefraim 06.06.2019 01:03

да, так как это отправляет на сервер, если пользователь выбрал «от» или «до», вы можете применить это к серверу, если у вас нет контроля над этим, просто добавьте поле.

Jamal Abo 06.06.2019 01:07

Хорошо, давайте рассмотрим, что у нас есть контроль над сервером для обработки выбранных «от» или «до», а также входного значения (не логического). Например; выбрал "от" и написал "Джон", далее как получится "от": "Джон" на сервер.

Nefraim 06.06.2019 01:11

Я обновил код... соответствует ли он вашим требованиям?

Jamal Abo 06.06.2019 01:24

это проблема на стороне сервера или неверный маршрут.

Jamal Abo 06.06.2019 01:33

Джамал, у меня проблема с добавленной стоимостью. Нет проблем со значением «к» (когда я выбираю «к» и добавляю его только к «к», но при выполнении противоположного значения «от» добавляется как к, так и к. Вы видите проблему в коде?

Nefraim 06.06.2019 14:13

Нет, но если вы хотите проверить себя, запустите песочницу и посмотрите ответ на вкладке dev (httpbin)

Jamal Abo 06.06.2019 16:54

Другие вопросы по теме