Как выделить одну кнопку в react native?

#javascript #reactjs #react-native #jsx

#javascript #reactjs #react-native #jsx

Вопрос:

Как я могу выделить одну кнопку, окруженную несколькими кнопками?

Вот мой компонент, который отображает кнопку. Кроме того, я импортировал пользовательскую кнопку, которую я создал некоторое время назад.

  const button = [
    {
        title: '#Food',
        selected: false,
        id: 1
    },
    {
        title: '#Fashion',
        selected: false,
        id: 2
    },
    {
        title: '#Art',
        selected: false,
        id: 3
    }]

 {button.map(({ title, id, selected }) => {
                return (
                    <View style={{ width: '25%', padding: 5, }}>
                        <CustomButton
                            bgColor={active ? 'red' : 'blue'}
                            title={title}
                            key={id}
                            onPress={() => chosenButton(selected, id)}
                            textColor={Colors.PRIMARY_COLOR} />
                    </View>
                )
            })}
 

Вот моя пользовательская кнопка

     const CustomButton = ({ title, containerStyle, textStyle, bgColor, textColor, onPress }) => {
    return (
        <Button onPress={onPress} block rounded style={[styles.btnStyle, containerStyle, { backgroundColor: bgColor, }]}>
            <Text style={[styles.text, textStyle, { color: textColor }]}>{title}</Text>
        </Button>
    );
};
 

На данный момент, вот мои кнопки

Изображение

Но я хочу выделить одну кнопку и изменить цвет ее фона при нажатии. Как я могу это сделать?

Ответ №1:

Вы могли бы сделать useState это в дочернем компоненте и изменить цвет при нажатии

  const CustomButton = ({ title, containerStyle, textStyle, bgColor, textColor, onPress }) => {
    const [bgCol,setBgCol] = useState(bgColor);
    const changeBg = () => setBgCol('yellow');

    return (
        <Button onPress={()=>{changeBg();onPress()}} block rounded style={[styles.btnStyle, containerStyle, { backgroundColor: bgCol, }]}>
            <Text style={[styles.text, textStyle, { color: textColor }]}>{title}</Text>
        </Button>
    );
};
 

Ответ №2:

Чтобы сохранить selected значение в buttons массиве, вы можете сделать следующее

 const [button, setButton] = useState([
    {
        title: '#Food',
        selected: false,
        id: 1
    },
    {
        title: '#Fashion',
        selected: false,
        id: 2
    },
    {
        title: '#Art',
        selected: false,
        id: 3
    }]);

const handleButtonClick = (index) => {

  const newData = [...button];
  newData[index].selected = !newData[index].selected;
  setButton(newData);

}



{button.map(({ title, id, selected }, index) => {
                return (
                    <View style={{ width: '25%', padding: 5, }}>
                        <CustomButton
                            bgColor={selected ? 'red' : 'blue'}
                            ....
                            onPress={() => handleButtonClick(index)}
                    />
                    </View>
                )
})}