¿Cómo hago para que se recuerde pressedItem y no se cambie en el siguiente onPress, para que se anule la selección si solo se vuelve a llamar a la función? ¿Quizás las identificaciones que se recordarán en una matriz y la matriz altera su longitud entre pressedItem y dePressedItem?
const [pressedItem, setPressedItem] = useState(null); let selected = []; const changeColor = (itemid) => { setPressedItem(itemid); } };
<FlatGrid data={interesi} style={tw``} spacing={10} renderItem={({ item }) => ( <TouchableWithoutFeedback onPress={() => changeColor(item.id)}> <View style={ pressedItem === item.id ? item.firstStyle : item.secondStyle }> <Text style={tw`text-black`}>{item.english}</Text>
Si no se puede presionar otra identificación, puede usar:
const changeColor = (itemid) => { if (!pressedItem) { setPressedItem(itemid); } };
Si está buscando no presionar la misma identificación que antes, entonces:
const changeColor = (itemid) => { if (pressedItem !== itemid) { setPressedItem(itemid); } };
EDITAR:
Actualizando la respuesta basada en los comentarios. Entonces necesitaría hacer algo como mantener un mapa del estado presionado del itemid
:
const [pressedItems, setPressedItems] = useState({}); let selected = []; const changeColor = (itemid) => { pressedItems[itemid] = !pressedItems[itemid]; setPressedItem(pressedItems); };
Debe agregar la identificación de su elemento a una matriz como dijo:
const [pressedIds, setPressedIds] = useState<number[]>([]); const isMyIdPressed = (id: number) => { if (pressedIds.include(id)) { setPressedIds(pressedIds.splice(pressedIds.indexOf(id), 1)); } else { setPressedIds([...pressedIds, id]); } } <FlatGrid data={interesi} style={tw``} spacing={10} renderItem={({ item }) => ( <TouchableWithoutFeedback onPress={() => isMyIdPressed(item.id)}> <View style={pressedIds.include(item.id) ? item.firstStyle : item.secondStyle }> <Text style={tw`text-black`}>{item.english}</Text>
Cada vez que presione una identificación, simplemente verifique si está en la matriz, si es así, agregue la identificación a la matriz y, si no, elimínela de la matriz.