62 votes

liaison react-native onPress avec un argument

Le comportement souhaité est de passer un argument (texte) au gestionnaire onClick à console.log mais il semble que je fasse quelque chose de mal avec la syntaxe.

Si je laisse l'argument comme ci-dessous, cela fonctionne bien :

export default class Nav extends Component {
  componentDidMount() {
    this.props.pickNumber(3);
  }

  onPress() {
    console.log('FOOOBAAR');
  }
  render() {
    return (
      <View>
        <Text>####################</Text>
        <Text>Intro Screen</Text>
        <Text>Number: {this.props.numbers}</Text>
        <TouchableHighlight onPress={this.onPress.bind(this)}>
          <Text>Go to Foo</Text>
        </TouchableHighlight>
      </View>
    );
  }

}

Cependant, si je veux passer un argument au gestionnaire onPress, il se plaint "Impossible de lire la propriété 'bind' d'undefined.

export default class Nav extends Component {
  componentDidMount() {
    this.props.pickNumber(3);
  }

  onPress(txt) {
    console.log(txt);
  }
  render() {
    return (
      <View>
        <Text>####################</Text>
        <Text>Intro Screen</Text>
        <Text>Number: {this.props.numbers}</Text>
        <TouchableHighlight onPress={this.onPress('foo').bind(this)}>
          <Text>Go to Foo</Text>
        </TouchableHighlight>
      </View>
    );
  }

}

Merci

Ajout : Si je le change en :

onPress={this.onPress.bind('foo')}

cela ne fonctionne pas non plus.

0 votes

En passant, techniquement, bind n'est pas du tout nécessaire dans ce cas puisque this n'est pas référencée dans le onPress fonction.

0voto

Nasreen Ustad Points 302

Essayez ceci

const onChangeHandler = index => { console.log(index) }
onPress={onChangeHandler.bind(this, index)}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X