Arhlit - информационные технологии

Как изменить значок (свойства имени значка) на кнопке после нажатия кнопки onPress

У меня есть компонент кнопки с текстом и значком на нем. Кнопка и значок из собственной базовой библиотеки... Как я могу изменить значок (свойства имени значка) после нажатия кнопки

фрагмент кода:

<Button
    onPress={}
    transparent
    iconRight
    small   
 >
  <Text style={{ color: 'red', fontSize: 18 }}>HIDE</Text>
   <Icon
     name='ios-arrow-down-outline'
     style={{ color: 'red', fontSize: 18 }} 
    />
   </Button>

  • Пожалуйста, добавьте код, который вы пробовали. 30.08.2018
  • поделитесь своим кодом здесь 30.08.2018

Ответы:


1

Вы можете добиться этого, изменив состояние после нажатия кнопки:

Рабочая демонстрация: https://snack.expo.io/r1dHpDBvX

Пример кода:

import React, { Component } from 'react';
import { Container, Header, Content, Button, Text, Icon } from 'native-base';

export default class ButtonThemeExample extends Component {
  constructor() {
   super();
   this.state = { iconName: "md-arrow-back" };
  }

  render() {
    return (
     <Container>
       <Header />
         <Content>
           <Button
             onPress={ () => this.setState(
               { iconName: "md-arrow-down" }
             )}
             transparent
             iconRight
             small   
            >
            <Text style={{ color: 'red', fontSize: 18 }}>HIDE</Text>
            <Icon
              name= {this.state.iconName}
              style={{ color: 'red', fontSize: 18 }} 
            />
          </Button>
        </Content>
      </Container>
     );
    }
  }

Надеюсь, это работает!

30.08.2018

2

Вы можете попробовать это:

        const defaultImage = require('../images/defaultImage.png');
        const changedImage = require('../images/changedImage.png');   
        class ChangeImage extends Component {
          constructor() {
            super();
            this.state = { showDefaultImage: true };
          }

          renderImage() = {
           const imgSrc = this.state.showDefaultImage? defaultImage : changedImage;
            return (
              <Image
                source={ imgSrc }
              />
            );
          }
          render(){
            return (
              <View>
                  <TouchableOpacity
                   onPress={ () => this.setState(
                   { showDefaultImage: !this.state.showDefaultImage }
                )} 
                  />
                    {this.renderImage()}
                  </TouchableOpacity>
                </View>
            );
          }
        }

Надеюсь, это поможет.

30.08.2018
  • Он спросил это относительно NativeBase, и ваш ответ, кажется, не включает вариант использования 31.08.2018
  • Ответ был до того, как он поместил код в свой вопрос, который он пробовал, поэтому пытался написать какой-то общий код. 31.08.2018

  • 3

    У меня была такая же проблема, вот как я решил ее, используя состояние и условные операторы onPress:

    function ListItem({title, description, status, onPress, onCheck}){  
    
      
         // Declare a new state variable, which we'll call "count"
         // Declare a new state variable, which we'll call "count"
      const [iconName, setIconName] = useState("checkbox-blank-circle");
       
        return(  
            <View style={styles.container}>
                <TouchableHighlight onPress={onPress} underlayColor={colors.dark}>
                <Icon name="menu" style={styles.icon} color="#333" background="#fff" />
                </TouchableHighlight>
                <View style={styles.column}>
                <AppText style={styles.title}>{title}</AppText>
                <AppText style={styles.description}>{description}</AppText>
                </View>
                <TouchableOpacity onPress={() => {
                  if(iconName == "checkbox-blank-circle" ){
                  setIconName("checkbox-marked-circle")
                  }
                  if(iconName == "checkbox-marked-circle"){
                    setIconName("checkbox-blank-circle")
                  }
                }
                }> 
                <Icon name={iconName} style={styles.icon} color="#999" background="#fff" />
                </TouchableOpacity>
            </View>
          
        );
    }

    18.03.2021
    Новые материалы

    12 сайтов с искусственным интеллектом, которые поразят вас
    Приготовьтесь поразить воображение Сегодня существует несколько веб-сайтов, использующих искусственный интеллект (ИИ). От индивидуальных рекомендаций по новостям до более умных поисковых..

    Скрытый технический долг в системах машинного обучения [NeurIPS 2015]
    Что такое технический долг? Технический долг — это метафора, введенная Уордом Каннингемом в 1992 году, чтобы объяснить долгосрочные затраты, связанные с быстрым продвижением в разработке..

    Алгоритм быстрой сортировки в Python
    Всем привет, добро пожаловать на programminginpython.com . Здесь я покажу вам, как реализовать алгоритм быстрой сортировки в Python. В предыдущих статьях я рассмотрел Сортировку вставкой ,..

    Как использовать манипулирование объектами в JavaScript
    Объекты являются важным строительным блоком JavaScript. Они позволяют группировать свойства и методы вместе. Объект представляет собой набор свойств. Свойства идентифицируются с..

    Разработка игр с помощью Godot Engine: мощный инструмент с открытым исходным кодом
    Разработка игр — творческий и сложный процесс, требующий множества навыков и инструментов. Одним из наиболее важных инструментов является игровой движок, который представляет собой программную..

    От XML к аннотациям: переход к современной конфигурации Spring
    Введение Фреймворк Spring претерпел значительную эволюцию с момента своего создания. Одним из заметных изменений стал переход от конфигураций на основе XML к конфигурациям, управляемым..

    Я люблю Руби!
    Я люблю Руби! Мне это нравится по той же причине, по которой мне нравится программировать на Python. Он настолько интуитивно понятен, а встроенные методы упрощают решение проблем. Если вы..