Использование 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
. Я прочитал документацию и искал другие источники, но у меня пока нет ответа, но я надеюсь, что есть способ сделать это.
Ответы
Ответ 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