React事件处理

事件处理

React元素的时间处理和DOM元素的很类似。可是有一点语法上的不一样;javascript

  • React时间绑定属性的命名采用驼峰式写法,而不是小写。
  • 若是采用JSX的语法,你须要传入一个函数做为时间处理函数,而不是一个字符串(DOM元素的写法)

例如,传统的HTML:html

<button onclick="activateLasers()">
  Activate Lasers
</button>

React中稍有不一样:java

<button onClick={事件处理函数}>
    Activate Lasers
</button>

在React中另一个不一样是你不能使用返回false的方式组织默认行为。你必须明确使用preventDefault。例如,传统的HTML中阻止连接默认打开一个新页面,你能够这样写:react

<a href="#" onclick="console.log('The link was clicked.'); return false">
  Click me
</a>

而在React中,应该这样写:浏览器

function ActionLink(){
    function handleClick(e){
        e.preventDefault();
        console.log(11111)
    }
    return(
        <a  href="#" onClick={handleClick}>
            Click me
        <a/>
    )
}

在这里,e 是一个合成事件。React 根据 W3C spec 来定义这些合成事件,因此你不须要担忧跨浏览器的兼容性问题。查看 SyntheticEvent 参考指南来了解更多。函数

使用 React 的时候一般你不须要使用 addEventListener 为一个已建立的 DOM 元素添加监听器。你仅仅须要在这个元素初始渲染的时候提供一个监听器。this

当你使用 ES6 class 语法来定义一个组件的时候,事件处理器会成为类的一个方法。例如,下面的 Toggle 组件渲染一个让用户切换开关状态的按钮:prototype

class  Toggle extends React.Component{
    constructor(props){
        super(props);
        this.handelClick= this.handelClick.bind(this);
    }
    
    handelClick(){
        this.setState(prevState=>({
            isToggleOn:!prevState.isToggleOn
        }))
    }
    
    render(){
        return(
            <button onClick={this.handleClick}>
                {this.state.isToggleOn? 'ON':'OFF'}
            </button>
        )
    }
}

ReactDOM.render(
    <Toggle />,
    document.getElementById('root')
);

你必须谨慎对待JSX回调函数中的this,类的方法默认是不会绑定this的。若是你忘记绑定this.handleClick并把它传入onClick,当你调用这个函数的时候,this的值会是unde.code

这并非 React 的特殊行为;它是函数如何在 JavaScript 中运行的一部分。一般状况下,若是你没有在方法后面添加 () ,例如 onClick={this.handleClick},你应该为这个方法绑定 thishtm

相关文章
相关标签/搜索