Подтвердить что ты не робот

Использование event.target с компонентами React

У меня возникают проблемы с моим проектом. Может ли кто-нибудь объяснить мне, почему я не могу использовать e.target для доступа к чему-либо, кроме className?

Ниже приведен код из моей точки входа:

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>
    )

  }
}

Я пытаюсь получить доступ к настройке в компоненте Меню, используя метод update. См. Меню ниже:

module.exports = class Menu extends React.Component {

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

        </div>
       )

    }
}

Я действительно хочу знать, почему я могу получить доступ к значениям txt и space, используя e.target. Я прочитал документацию и искал другие источники, но у меня пока нет ответа, но я надеюсь, что есть способ сделать это.

4b9b3361

Ответ 1

Первый аргумент в методе update - это объект SyntheticEvent который содержит общие свойства и методы для любого event, это не ссылка на компонент React, где есть props свойств.

если вам нужен аргумент pass для метода обновления, вы можете сделать это так

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

и получить эти аргументы внутри метода update

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

Example


event.target дает вам собственный DOMNode, тогда вам нужно использовать обычные API DOM для доступа к атрибутам. Например getAttribute или 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