Я незнаком с Топором ios, поэтому не совсем уверен, как им пользоваться. Я вижу некоторые проблемы с другой функцией.
this.state.inventory.push(e.target.value);
изменяет состояние напрямую. Это плохая идея. Вы можете прочитать почему здесь: https://daveceddia.com/why-not-modify-react-state-directly/. Обычно при обновлении состояния всегда используйте setState()
.
Во-вторых, я бы не рекомендовал переводить компоненты React в ваше состояние. Вам не нужно этого делать, поскольку у вас уже есть значения идентификаторов продуктов в вашем штате (насколько я могу судить по крайней мере). Вот пример того, как реализовать вашу логику c:
addProductINventroy = async e => {
// Get your API output here, it appears that Axios already
// conveniently turns your response into a javascript object:
const newProduct = await getProduct(e.target.value);
// Add your product to the inventory state object
this.setState(inventory: [...inventory, newProduct])
}
render() {
return this.state.inventory.map((item, index) =>
<li key={index}>
{item.name}
</li> )
})
}
Обратите внимание, что я использую здесь оператор расширения ES6 , чтобы объединить идентификатор с существующим массивом. Это создает новый массив и не изменяет старый.
Я также реализовал метод render()
, вы не показывали ту часть, где вы визуализируете объекты. Это пример того, как получить доступ к объекту состояния при рендеринге.
Обратите внимание, что в моей реализации объект состояния inventory
содержит все продукты в формате JSON. Если вам нужно использовать объект inventory
для идентификаторов где-то еще, вам следует дать ему другое имя.