Реагировать на состояние обновления с вложенным объектом

Чтобы использовать подход MSMQ (Message Queue) (обратите внимание, что я не проверял это полностью, поэтому нужно только начать):

https://msdn.microsoft.com/ru -us / library / ms973860.aspx

http://www.informit.com/articles/article.aspx?p=131272&seqNum=6

Чтобы создать самообслуживаемую службу OWIN Web Api 2.0, я бы рекомендовал использовать TopShelf (я сделал это сам, но слишком много накладных расходов, просто передав простую строку):

https://codeopinion.com/self-host-asp-net-web-api-as-a-windows-service/

Другие варианты:

  1. Связь через TCP / IP напрямую
  2. Использование базы данных (обновления сервера, чтение VB6)
  3. использовать сложную систему реле, активируемую arduino, чтобы заставить мышей принимать конкретные пути в лабиринте и обнаруживать их движения (примечание: не совсем серьезно)
  4. Множество вещей, о которых я не думал

0
задан Andrew 19 January 2019 в 20:07
поделиться

4 ответа

У вас должен быть атрибут name в элементах формы, а затем проверьте значение этого имени до setState. Таким образом, метод render() выглядит следующим образом

render() {
  const {name, surname} = this.state;
  const { street, city} = this.state.address;

  return (
    <form onSubmit={this.handleSubmit}>
      <input type='text'
        name={name}
        value={name}
        onChange={this.handleChange} />
      <input type='text'
        name={surname}
        value={surname}
        onChange={this.handleChange} />
      <input type='text'
        name={street}
        value={street}
        onChange={this.handleChange} />
      <input type='text'
        name={city}
        value={city}
        onChange={this.handleChange} />
      <input type='submit' value='Submit' />
    </form>
  );
}

и handleChange()

handleChange = e => {
  const name = e.target.name;
  if (name === 'city' || name === 'street') {
    this.setState({
      address: {
        ...state.address,
        [name]: e.target.value
      }
    });
  } else {
    this.setState({
      [name]: e.target.value
    });
  }
};

... - это ES6 Spread Operator , это самый чистый способ обновить вложенное состояние в React.

0
ответ дан Vu Huu Cuong 19 January 2019 в 20:07
поделиться

Вам просто нужен доступ к улице и городу? Просто сначала деструктурируйте адрес следующим образом.

Измените

const {name, surname} = this.state;
const { street, city} = this.state.address;

на

const {name, surname, address } = this.state;
const { street, city} = address;
0
ответ дан stever 19 January 2019 в 20:07
поделиться

Я знаю, что все вы столкнулись с подобной задачей, но весь смысл в том, чтобы переделать исходное состояние. React не ориентирован на работу с вложенными состояниями.

this.state = {
    name: '',
    surname: '',
    street: '',
    city: ''
}
0
ответ дан Mark Kovalenko 19 January 2019 в 20:07
поделиться

Я бы порекомендовал вам написать отдельный обработчик изменений для address. Это сделает ваш код простым и легким для понимания вместо добавления ненужной сложности к этому простому методу.

function handleAddressChange = e => {
    const {name, value} = event.target
    this.setState(({ address }) => {
        address: {
            ...address,
            [name]: value
        }
    })
}
0
ответ дан Vedant 19 January 2019 в 20:07
поделиться
Другие вопросы по тегам:

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