#react-native #drop-down-menu
#react-native #выпадающее меню
Вопрос:
Нажмите здесь, чтобы просмотреть изображение
Я попробовал несколько подходов для достижения этой цели в своем приложении. Мое требование заключается в том, чтобы создать интерактивные 3 точки в заголовке экрана и по щелчку по этим 3 точкам открыть подменю с некоторыми пунктами. Далее при нажатии на эти элементы должен быть открыт отдельный экран.
Но каждый раз у меня возникают проблемы. Я попробовал нижеприведенный подход
- react-native-popup-menu: не удается его реализовать.
Я застрял в этом несколько дней, приветствуется любой подход / предложение.
Ответ №1:
Вы можете попробовать использовать react-native-element-dropdown
import React, { useState } from 'react';
import { StyleSheet, Text, View } from 'react-native';
import { Dropdown } from 'react-native-element-dropdown';
import AntDesign from 'react-native-vector-icons/AntDesign';
const data = [
{ label: 'Item 1', value: '1' },
{ label: 'Item 2', value: '2' },
{ label: 'Item 3', value: '3' },
{ label: 'Item 4', value: '4' },
{ label: 'Item 5', value: '5' },
{ label: 'Item 6', value: '6' },
{ label: 'Item 7', value: '7' },
{ label: 'Item 8', value: '8' },
];
const DropdownComponent = () => {
const [value, setValue] = useState(null);
const [isFocus, setIsFocus] = useState(false);
const renderLabel = () => {
if (value || isFocus) {
return (
<Text style={[styles.label, isFocus amp;amp; { color: 'blue' }]}>
Dropdown label
</Text>
);
}
return null;
};
return (
<View style={styles.container}>
{renderLabel()}
<Dropdown
style={[styles.dropdown, isFocus amp;amp; { borderColor: 'blue' }]}
placeholderStyle={styles.placeholderStyle}
selectedTextStyle={styles.selectedTextStyle}
inputSearchStyle={styles.inputSearchStyle}
iconStyle={styles.iconStyle}
data={data}
search
maxHeight={300}
labelField="label"
valueField="value"
placeholder={!isFocus ? 'Select item' : '...'}
searchPlaceholder="Search..."
value={value}
onFocus={() => setIsFocus(true)}
onBlur={() => setIsFocus(false)}
onChange={item => {
setValue(item.value);
setIsFocus(false);
}}
renderLeftIcon={() => (
<AntDesign
style={styles.icon}
color={isFocus ? 'blue' : 'black'}
name="Safety"
size={20}
/>
)}
/>
</View>
);
};
export default DropdownComponent;
const styles = StyleSheet.create({
container: {
backgroundColor: 'white',
padding: 16,
},
dropdown: {
height: 50,
borderColor: 'gray',
borderWidth: 0.5,
borderRadius: 8,
paddingHorizontal: 8,
},
icon: {
marginRight: 5,
},
label: {
position: 'absolute',
backgroundColor: 'white',
left: 22,
top: 8,
zIndex: 999,
paddingHorizontal: 8,
fontSize: 14,
},
placeholderStyle: {
fontSize: 16,
},
selectedTextStyle: {
fontSize: 16,
},
iconStyle: {
width: 20,
height: 20,
},
inputSearchStyle: {
height: 40,
fontSize: 16,
},
});
Ответ №2:
Вы можете просто создать модальный. Создайте его в соответствии с вашими потребностями и откройте его по щелчку. Внутри modal вы можете просто создать массив действий, которые вы собираетесь выполнить, например:
const actions=[
"Date range",
"Specific Merchant",
"Repayment History",
]
Затем используйте actions.map, чтобы сопоставить их с вашим дизайном.
После этого, для выполнения действия при нажатии любого элемента, вы можете получить индекс выбранного элемента и выполнить определенное действие.