У меня есть FlatList с около 60 пунктов. У каждого элемента есть маленькая кнопка, которая нажимается для отображения дополнительной информации внутри элемента FlatList.
<View style={styles.infoIcon} >
<TouchableOpacity onPress={() => { toggleInfo() }} >
<Ionicons name="ios-information-circle" size={40} color={"#0ca9dd"} />
</TouchableOpacity >
</View>
{showInfo ? <View><Text>{ itemData.item.info }</Text><View> : null }
Функция переключения onPress выглядит примерно так:
const toggleInfo = () => {
if (showInfo === true) {
setShowInfo(false);
} else {
setShowInfo(true);
}
};
Конечно, так как это FlatList, когда я нажимаю кнопку, все элементы FlatList показывают их скрытое содержимое. Но я хочу, чтобы отображалась только информация о выбранном элементе, оставляя все остальные без изменений.
Итак, я изменил onPress для получения аргумента:
<TouchableOpacity onPress={() => { toggleInfo(itemData.item.id) }} >
..., который хорошо. Но теперь мне нужно указать целевой массив состояний (который совпадает с идентификатором, но с «z», прикрепленным на конце, чтобы избежать любых конфликтов переменных):
const toggleInfo =(id) => { // id might be "ABC"
const infoState = `${id}z`;
const infoStateSET = `set${speciesState}`; // therefore: setABCz
// Now I want to target the state "ABCz" and "setABCz" useState variables
if (infoState === true) {
infoStateSET(false);
} else {
infoStateSET(true);
}
};
Теперь, очевидно, не существует литерала "infoStateSET", чтобы изменить состояние, но я хочу использовать переменную для назначения функции установленного состояния.
Возможно ли это?