Состояние не обновляется до второго раза, когда форма отправлена - PullRequest
2 голосов
/ 07 апреля 2019

UI and console of the issue

Поэтому, когда добавляется сеанс и отправляется форма, я хочу, чтобы цена клиента была переведена в состояние моего сеанса .. то естьто, что я пытаюсь сделать в этой части моего кода здесь.

state = {
    id: null, 
    name: null, 
    duration: null, 
    dayOfWeek: null,
    price: null
  }

handleSubmit = (e) => {
    e.preventDefault();
    let newPrice = 0;
    this.props.clientList.filter(client => {
      if (client.name === this.state.name) 
      {newPrice = client.price}
      this.setState({
        price : newPrice
      });
      console.log("price = " + this.state.price, 'newPrice = ' + newPrice)
    })
    this.props.addSession(this.state);
    e.target.reset();
    this.setState({
      id: null, 
      name: null, 
      duration: null, 
      dayOfWeek : null
    });
  }   

Что происходит, и я пытаюсь изобразить образ консоли и две сессии, которые я добавил, это то, что когда я добавляю еев первый раз выходит из системы цена = null и newPrice = 40, во второй раз цена = 40. Почему мой код здесь не работает?

Я могу добавить больше своего кода, если это необходимо.Дайте мне знать, что вам нужно увидеть, спасибо!

Ответы [ 2 ]

2 голосов
/ 07 апреля 2019

setState является асинхронной функцией ... и вы получаете доступ к вашему старому состоянию , вызывая следующую строку сразу после setState:

this.props.addSession(this.state); 

-

handleSubmit = (e) => {
  e.preventDefault();
  let newPrice = 0;
  this.props.clientList.filter((client) => {
    if (client.name === this.state.name) {
      newPrice = client.price;
    }

    this.setState({
      price: newPrice,
    });
    console.log(`price = ${this.state.price}`, `newPrice = ${newPrice}`);
  });

  this.props.addSession({ ...this.state, price: newPrice }); // <- Look at this
  e.target.reset();
  this.setState({
    id: null,
    name: null,
    duration: null,
    dayOfWeek: null,
  });
};
2 голосов
/ 07 апреля 2019

Состояние не обновляется сразу.Если вам нужен обратный вызов после обновления состояния, вы можете использовать

this.setState({
      price : newPrice
}, ()=>{
 //CallBack here
       console.log("price = " + this.state.price, 'newPrice = ' + newPrice)
})

Надеюсь, это поможет.Если я не понимаю твою проблему.Пожалуйста, ответьте

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...