Управление выбранным стилем элемента с помощью React Native State в группе элементов - PullRequest
0 голосов
/ 03 июня 2019

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

Я пытаюсь сделать так, чтобы у меня был массив, содержащий напитки, и я отображал этот массив, чтобы отобразить их.Мне нужно, чтобы пользователь выбрал, какой напиток она хотела бы выпить.После выбора я хотел бы изменить его стиль, чтобы выделить выбранный напиток.

Я пробовал вложенный объект с состоянием selectedDrink, но, насколько я здесь прочитал, вложенные объекты не годятся для производительности в React.

Когда я использую выбранное состояние и при щелчке по любому из них стиль всех из них изменяется.

state = {
    selected: false
    selectedDrink: {
        Water: false,
        Coffee: true,
        Tea: false,
    },
};

drinkList = (begin, end) => {

    drinks = [
      'Water',
      'Coffee',
      'Tea',
    ];
    drinks = drinks.slice(begin, end);

return drinks.map(data => {
  const imageLinks = {
    Water: require('../assets/images/Water.png'),
    Coffee: require('../assets/images/Coffee.png'),
    Tea: require('../assets/images/Tea.png'),
  };

  {
    if (data === 'Water') {
      image = <Image style={styles.drinkImages} source={imageLinks.Water} />;
    } else if (data === 'Coffee') {
      image = <Image style={styles.drinkImages} source={imageLinks.Coffee} />;
    } else if (data === 'Tea') {
      image = <Image style={styles.drinkImages} source={imageLinks.Tea} />;
    } else {
      image = <Image style={styles.drinkImages} source={imageLinks.Water} />;
    }
  }

  return (
    <View style={styles.drinkContainer}>
      <TouchableOpacity
        onPress={() => {
          this.setState({ selected: !this.state.selected });
        }}

        //this is where I would like to change style based on state
        style={[
          styles.drinkButtonContainer,
          this.state.selected ? styles.drinkSelectedButtonContainer : null,
        ]}
      >
        {image}
      </TouchableOpacity>
      <Text style={styles.infoTextStyle}>{data}</Text>
    </View>
  );
});
};

1 Ответ

1 голос
/ 03 июня 2019

Что я сделал, это создал выбранное состояние с пустой строкой. Каждый раз, когда кто-либо нажимает на элемент, я устанавливаю штат с названием напитка, а затем сравниваю выбранный штат с названием напитка. Если он соответствует стилю, применяется к выбранному напитку

state = {
  selected: '',
};

  return (
    <View style={styles.drinkContainer}>

        // I set the state to drink name
      <TouchableOpacity
        onPress={() => {
          this.setState({ selected: data });
        }}

        // Then compare drink name with selected state and apply styling
        style={[
          styles.drinkButtonContainer,
          this.state.selected === data ? styles.drinkSelectedButtonContainer : null,
        ]}
      >
        {image}
      </TouchableOpacity>
      <Text style={styles.infoTextStyle}>{data}</Text>
    </View>
  );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...