#react-native #redux #react-redux
Вопрос:
у меня возникают проблемы, когда я удаляю товары из корзины, корзина не удаляет товар из корзины, а вместо этого добавляет пустой товар
<
Это экран корзины
ScrollView>
{this.props.cartItems.map((item, index) => {
return (
<Menu key={index} style={{ padding: 0.5 }}>
<MenuImage source={item.image}/>
<MenuInfor>
<Text dark bold>{item.name}</Text>
<Text dark small>{item.info}</Text>
<Text dark bold>${item.price}</Text>
</MenuInfor>
<TouchableOpacity
onPress={() => this.props.removeItem(item.id)}
style={{alignItems: 'flex-end', justifyContent: 'flex-end', alignSelf: 'flex-end'}}
>
<AntDesign name="minuscircleo" size={30} color="#000" />
</TouchableOpacity>
</Menu>
)
})}
</ScrollView>
Следующее-это мое action.js файл
const addToCart = (id, count) => (
{
type: 'ADD_TO_CART',
payload:{
id,
count,
}
}
);
// removeFromCart
const removeFromCart = (id) => (
{
type: 'REMOVE_FROM_CART',
id,
count,
}
);
следующее-это мое reducer.js файл
const cartItems = (state = [], action) => {
switch (action.type) {
case 'ADD_TO_CART':{
return [...state, action.payload ]
}
case 'REMOVE_FROM_CART':
return [...state, state.filter(cartItem => cartItem.id !== action.payload.id)]
case 'CLEAR_CART':
return {
...state,
cartItems: ['']
}
}
return state
}
export default cartItems
Комментарии:
1. Не могли бы вы, пожалуйста, поделиться исходным состоянием редуктора?
2. Я считаю, что ваше заявление о возврате в части «REMOVE_FROM_CART» редуктора немного неверно. Я не уверен, как именно решить вашу проблему, но другие ваши инструкции return возвращают объекты, в то время как инструкция remove cart возвращает массив. Вы могли бы попробовать что-то вроде этого:
return { ...state, cartItems: state.cartItems.filter(....)};
Ответ №1:
Глядя на код, который вы предоставили….Я думаю, что это единственная ошибка в вашем коде.
case 'REMOVE_FROM_CART':
return {
...state,
cartItems: state.cartItems.filter((cartItem) => cartItem.id !=
action.payload.id)
};
Комментарии:
1. я применил этот код, но в нем говорится, что неопределенный не является объектом (оценка «state.cartitems.filter») этот код появляется после нажатия кнопки «Удалить товар» в корзине
2. Не могли бы вы, пожалуйста, поделиться своим начальным состоянием редуктора. Я предположил, что у вас есть массив cartItems в вашем состоянии….если ваше состояние-это массив, который вы обновляете, то
state.cartItems.filter
его следует заменитьstate.filter
.