У меня есть реквизиты в виде массива объектов, которые я использую для обновления состояния своих элементов. Я могу перебирать объекты и создавать объекты, содержащие product_id и количество. Когда я просто использую console.log, я вижу правильные данные, однако, когда я пытаюсь обновить состояние, я получаю сообщение об ошибке "Too many re-renders, react limits the number of renders to prevent an infinite-loop."
const [items, setItems] = useState(
{
product_id: 93,
quantity: 2,
},
{
product_id: 22,
variation_id: 23,
quantity: 1,
},
);
const cart = props.cart;
Object.keys(cart).forEach(function (key) {
const prod = {
product_id: cart[key].id,
quantity: cart[key].quantity,
};
setItems((currentItems) => {
return {prod, ...currentItems};
});
});
Edit My cart props извлекается из redux с помощью следующего кода
function mapStateToProps(state) {
return {
cart: state.cart,
};
}
export default connect(mapStateToProps)(Checkout);
Проблема в том, что у этой опоры больше атрибутов, чем просто количество и идентификатор, которые мне нужны.
setItems()
на глобальном уровне компонента. Оберните код обновления состояния внутри функции, а затем вызовите эту функцию на основе события (например,onClick
,onChange
или чего-то подобного). Более того, обновлять состояние внутриforEach
- не лучшая идея. Просто пропустите массив и в конце обновите состояние. - person Faraz Ahmad   schedule 28.07.2020