новенький, чтобы реагировать на родной и редукционный, и не знаю, как мне решить эту проблему. В основном я пытаюсь создать приложение доставки еды, как Uber ест. Теперь, когда пользователь выбирает конкретную еду, ему может потребоваться выбрать несколько дополнений для еды, используя список выбора. Я использовал .map () для создания списка выбора для каждого дополнения (например, у нас может быть сторона и список выбора напитков. Сторона: [картофель фри, салат], напитки: [кокс, пепси])
У меня возникают проблемы с передачей текущего значения каждого списка выбора родительскому компоненту, чтобы выбор пользователей можно было объединить с другими данными и затем добавить в их корзину. Какой лучший способ для меня это сделать? Я действительно борюсь, и любая помощь будет высоко ценится!
Вот текущая настройка моего приложения:
Компонент питания (родительский)
const Meal = props => {
const meal = props.navigation.getParam("meal");
const cartItems = useSelector(state => state.cartItems);
const addOns = () => {
if (!meal.addOns) {
return;
} else {
return meal.addOns.map((addOn, index) => {
const isRequired = () => {
if (addOn.isRequired) {
return (
<CustomTextBold
text={`${addOn.type} (required)`}
style={{ paddingVertical: 5 }}
/>
);
} else {
return (
<CustomTextBold
text={addOn.type}
style={{ paddingVertical: 5 }}
/>
);
}
};
return (
<View key={index} style={styles.pickerContainer}>
{isRequired()}
<AddOnPicker items={addOn.options} type={addOn.type} />
</View>
);
});
}
};
const price = meal.price * quantity;
return (
<ScrollView>
{addOns()}
</ScrollView>
);
};
export default Meal;
Выбор компонента списка (дочерний)
const AddOnPicker = props => {
const addOnItems = [];
const pushItems = () => {
props.items.forEach(item => {
if (item.cost === 0) {
addOnItems.push({
label: item.option,
value: item.option,
name: item.option,
price: item.cost
});
} else {
addOnItems.push({
label: item.option + " " + ` (+N$${item.cost})`,
value: item.option + " " + ` (+N$${item.cost})`,
name: item.option,
price: item.cost
});
}
});
};
pushItems();
const dispatch = useDispatch();
const handlePickerValue = value => {
const item = addOnItems.find(item => item.label === value);
dispatch(setItems(item));
};
return (
<RNPickerSelect
placeholder={placeholder}
style={pickerSelectStyles} // value={pickerValue}
onValueChange={value => {
handlePickerValue(value);
}}
items={addOnItems}
/>
);
};
export default AddOnPicker;