Чтобы использовать подход 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/
Другие варианты:
У вас должен быть атрибут 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.
Вам просто нужен доступ к улице и городу? Просто сначала деструктурируйте адрес следующим образом.
Измените
const {name, surname} = this.state;
const { street, city} = this.state.address;
на
const {name, surname, address } = this.state;
const { street, city} = address;
Я знаю, что все вы столкнулись с подобной задачей, но весь смысл в том, чтобы переделать исходное состояние. React не ориентирован на работу с вложенными состояниями.
this.state = {
name: '',
surname: '',
street: '',
city: ''
}
Я бы порекомендовал вам написать отдельный обработчик изменений для address
. Это сделает ваш код простым и легким для понимания вместо добавления ненужной сложности к этому простому методу.
function handleAddressChange = e => {
const {name, value} = event.target
this.setState(({ address }) => {
address: {
...address,
[name]: value
}
})
}