将event.target与React组件一起使用

Luc*_*let 45 javascript reactjs

我的项目遇到了一些麻烦.任何人都可以向我解释为什么我不能使用它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>
    )

  }
}
Run Code Online (Sandbox Code Playgroud)

我试图使用该方法访问菜单组件中的设置update.见下面的菜单:

module.exports = class Menu extends React.Component {

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

        </div>
       )

    }
}
Run Code Online (Sandbox Code Playgroud)

我真的想知道为什么我可以访问txtspace使用值e.target.我已阅读文档并寻找其他来源,但我还没有答案,但我希望有一种方法可以做到.

Ale*_* T. 61

update方法中的第一个参数是SyntheticEvent包含公共属性和方法的对象event,它不是对具有属性的React组件的引用props.

如果你需要传递参数来更新方法,你可以这样做

onClick={ (e) => this.props.onClick(e, 'home', 'Home') }
Run Code Online (Sandbox Code Playgroud)

并在update方法中获取这些参数

update(e, space, txt){
   console.log(e.target, space, txt);
}
Run Code Online (Sandbox Code Playgroud)

Example


event.target为您提供本机DOMNode,然后您需要使用常规DOM API来访问属性.例如getAttributedataset

<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);
}
Run Code Online (Sandbox Code Playgroud)

Example