68 votes

Utilisation de event.target avec les composants React

J'ai des difficultés avec mon projet. Quelqu'un peut-il m'expliquer pourquoi je ne peux pas utiliser la fonction e.target pour accéder à tout autre chose que className ?

Voici le code de mon point d'entrée :

import React from 'react'
import ReactDOM from 'react-dom'
import Button from './Button'
import Menu from './Menu'

function test(e){
    console.log(e.target.ref)
 }

module.exports = class Content extends React.Component {
    constructor(props){
        super(props)
        this.state={content: ''}
    }

update(e){
    console.log(e.target.txt)

}

render (){
    return (
        <div id="lower">
            <div id="menu">
               <Menu onClick={this.update.bind(this)}/>
            </div>
            <div id="content">
                {this.state.content}
            </div>
        </div>
    )

  }
}

J'essaie d'accéder au paramètre dans le Menu en utilisant le composant update méthode. Voir Menu ci-dessous :

module.exports = class Menu extends React.Component {

    render (){
       return (
           <div>
               <Button space="home" className="home" txt="Home" onClick={this.props.onClick}/>

        </div>
       )

    }
}

Je veux vraiment savoir pourquoi je peux accéder à la txt et space valeur en utilisant e.target . J'ai lu la documentation et cherché d'autres sources mais je n'ai pas encore de réponse, mais j'espère qu'il y a un moyen de le faire.

88voto

Alexander Points 24716

Premier argument dans update La méthode est SyntheticEvent qui contient des propriétés et des méthodes communes à tout event il ne s'agit pas d'une référence au composant React où il y a une propriété props .

si vous avez besoin de passer un argument à la méthode de mise à jour vous pouvez le faire comme ceci

onClick={ (e) => this.props.onClick(e, 'home', 'Home') }

et obtenir ces arguments à l'intérieur update méthode

update(e, space, txt){
   console.log(e.target, space, txt);
}

Example


event.target vous donne le natif DOMNode vous devez alors utiliser les API DOM ordinaires pour accéder aux attributs. Par exemple getAttribute ou dataset

<button 
  data-space="home" 
  className="home" 
  data-txt="Home" 
  onClick={ this.props.onClick } 
/> 
  Button
</button>

onClick(e) {
   console.log(e.target.dataset.txt, e.target.dataset.space);
}

Example

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