Задать вопрос
Shatoidil
@Shatoidil

Как вставить значения в поле объекта, через SetState?

Пишу приложение в React, делаю форму и столкнулся с проблемой.

Есть модель
PrePaymentParameters.ts
export interface PrePaymentParameters {
    PartnerId: number;
    OrderNumber: string;
    WebSite: string;
    AccountNumber: string;
    Sign: string;
    SumValue: number;
    EmailClient: string;
    EmailOperator: string;
    NumberTransactions: number;
    SumTransaction: number;
}

Импортирую ее в форму и кидаю ее в state
import * as React from "react";
import 'bootstrap/dist/css/bootstrap.min.css';
import Field from '../../components/Field/Field';
import Form from '../../components/Form/Form';
import ContentHeader from '../../components/ContentHeader/ContentHeader';
import { PrePaymentParameters } from '../../models/Orders/Operations/PrePaymentParameters'
import {
    Card,
    CardBody,
    Col,
    Row,
} from 'reactstrap';
import Axios from "axios";

export interface IFormState {
    submitSuccess?: boolean;
    prePayment: PrePaymentParameters;
}


export default class PaymentByCardPage extends React.Component<{}, IFormState> {

    constructor(props: {}) {
        super(props);

        this.state = {
            prePayment: {
                PartnerId: 766,
                OrderNumber: "",
                WebSite: "sa",
                AccountNumber: "",
                Sign: "gdfgmsdlkfdfngjm",
                SumValue: 0,
                EmailClient: "dasd@sad.we",
                EmailOperator: "fgh@fd.er",
                NumberTransactions: 5,
                SumTransaction: 500
            }

        };
    }

Теперь пытаюсь установить значения, когда происходит событие OnChange на Input, но у меня не получается обратиться непосредственно к полю внутри объекта.
<Field id="SumValue" label="Сумма предоплаты" onChange={e => this.setState({ prePayment: {SumValue : 1000 } })}


Есть два вопроса
1. Как мне вставить значение в поле объекта?
2. Как в конструкторе инициализировать поля с типом number? Со строками все понятно можно сделать так
AccountNumber: "", а вот с числами не могу понять как.
  • Вопрос задан
  • 201 просмотр
Подписаться 1 Простой 1 комментарий
Решения вопроса 2
@igorkorneichuk
Я бы первый вопрос через https://github.com/kolodny/immutability-helper/ сделал (метод update()).

Второй вопрос, ваш SumValue: 0 не подходит?
Ответ написан
@real2210
this.setState( (state)=>{...state, prePayment: {...state.prePayment, SumValue: 1000 }})


По второму вопросу я обычно делаю null либо undefined
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы