2
votes

Bouton personnalisé Le composant dans React Native n'accepte pas les accessoires

J'ai créé un bouton personnalisé (composant) dans react native pour l'utiliser dans toute l'application avec les valeurs paramétriques requises (couleur, titre, fonction onPress, etc.) mais il n'accepte pas les valeurs, je transmets l'appel voici ma classe de boutons

export class Login extends Component<Props> {
render() {
    return(
        <View style={styles.containerStyle}>
            <ImageBackground source={require ('./../../assets/images/bg.jpg')}
                             style={styles.bgStyle}/>

            <View style={styles.loginAreaViewStyle}>

                <Image />

                <CustomInputField
                    inputPlaceholder={'Email'}
                    userChoice_TrF={false}

                />
                <CustomInputField
                    inputPlaceholder={'Password'}
                    userChoice_TrF={true}

                />

           <CustomButton
                btnTitle={'Login'}
                btnBgColor={'black'}
                btnPress={this._LoginFunction()}/>


        </View>
        </View>
    );
}

_LoginFunction()
{
    return(alert('Login successful'))

}}

ici je l'utilise

import React from 'react';
import {Button,Text} from 'react-native';
export const CustomButton = ({btnTitle, btnBgColor,btnPress}) =>
(

    <Button
        title={btnTitle}

        style={
            {
                width:'200',
                height:'40',
                padding:10,
                marginTop:20,
                backgroundColor:'btnBgColor',
        }}

        onPress = {btnPress}>
    </Button>
);

voici outn put  a >

vous pouvez voir mes valeurs paramétriques, la couleur, la largeur, la hauteur, etc. n'ont aucun effet sur le bouton


0 commentaires

3 Réponses :


1
votes

Utilisez la fonction fléchée comme celle-ci Voyez la différence XXX


1 commentaires

Je pense que j'utilise de la même manière



2
votes

Le problème est que vous avez essentiellement créé un wrapper autour du composant Button à partir de react-native

https://facebook.github.io/react-native/docs/button

Si vous regardez la documentation pour le bouton il n'y a que 7 accessoires que vous pouvez utiliser https://facebook.github.io/react-native/docs/button# accessoires

  • onPress
  • titre
  • étiquette d'accessibilité
  • couleur
  • désactivé
  • testID
  • hasTVPreferredFocus

Il n'y a pas d'accessoire de style . Donc, ce que vous passez est simplement ignoré.

Ce que vous devez faire dans votre CustomButton est d'utiliser l'un des Touchables https://facebook.github.io/react-native/docs/ manipulation-touches # touchables

Donc, votre composant pourrait devenir quelque chose comme ça (vous devrez peut-être ajuster le style, etc.):

import React from 'react';
import {TouchableOpacity,Text} from 'react-native';
export const CustomButton = ({btnTitle, btnBgColor,btnPress}) =>
(
    <TouchableOpacity
        style={{
             width:200,
             height:40,
             padding:10,
             marginTop:20,
             backgroundColor:{btnBgColor},
        }}
        onPress = {btnPress}>
      <Text>{btnTitle}</Text>
    </TouchableOpacity>
);

Les valeurs que vous devez transmettre pour la largeur et la hauteur doivent également être des nombres.

Voici une collation qui fonctionne https://snack.expo.io/@andypandy/custom-button-example a >


1 commentaires

merci d'avoir répondu, mais de la même manière que j'ai utilisé avec `` opacité tactile '' où cela fonctionnait bien



2
votes

ici, j'ai apporté quelques modifications à votre code.

import {AppButton} from "../../components/AppButton";

                <AppButton
                    btnBgColor={'#2abec7'}
                    btnPadding={10}
                    btnPress={this._LoginFunction}
                    btnTextSize={18}
                    btnTitle={'list'}
                    textColor={'#000'}
                />

Et utilisez-le comme ceci, cela résoudra certainement votre problème.

import React from "react";
import {TouchableOpacity,Text} from 'react-native';

export const AppButton = ({btnTitle, btnBgColor, textColor, btnTextSize, btnPress, btnPadding})=>(

    <TouchableOpacity style={{backgroundColor:btnBgColor  }} onPress={btnPress}>

        <Text style={{color:textColor, fontSize:btnTextSize, padding: btnPadding}}>
            {btnTitle}
        </Text>

    </TouchableOpacity>
)

et n'utilisez pas () sur
btnPress={this._LoginFunction()}

utilisez-le simplement comme
btnPress={this._LoginFunction}


0 commentaires