FE 讀書會(4-6):React Event Handling
React Event Handling
React Element 中註冊事件的方法
class MyHead extends React.Component
{
render(){
return React.createElement("H1", {
// 在屬性中註冊事件處理器變為Camel命名: onclick => onClick,
onClick:this.clickHandler.bind(this)
}, "Hello World");
}
clickHandler(e){
//事件處理器的第一個參數, 取得 Event Object
console.log(this.props);
}
}
JSX 中註冊事件的方法
class MyHead extends React.Component
{
render(){
return <div onClick={this.clickHandler.bind(this)}
className={"head-"+this.props.level}>Hello Component</div>;
}
clickHandler(e){
//事件處理器的第一個參數, 取得 Event Object
console.log(this.props);
}
}
回顧一下上一篇文章, JSX 動態綁定物件是使用 {}
。
事件就如同一個物件一樣,所以使用方式就是 onClick={this.clickHandler.bind(this)}
。 React 事件是使用 Camel
命名,後面單字的開頭要大寫。 這裡使用 bind
來綁定物件,確保事件中的 this
為物件本人。
下方事件的 function :
clickHandler(e){
this.setState({color:"blue"});
}
第一個參數 e
是事件物件,這是原生瀏覽器事件。
如果想知道事件詳細的說明,可以參閱 SyntheticEvent。
完整可動的 Sample Code
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>My Component</title>
<script crossorigin src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
<style type="text/css">
.head-3 {font-size: 1.2em;font-weight: bold;}
</style>
<script type="text/babel">
//設計組件類別
class MyHead extends React.Component{
constructor(props){
super(props);
this.state={color:"red"};
}
render(){
//return React.createElement("div", {className:"head", style:{color:this.props.color}}, "Hello World" + this.props.level);
return <div className={"head-" + this.props.level}
style={{color: this.state.color}}
onClick={this.clickHandler.bind(this)}
onMouseOver={this.mouseOverHandler.bind(this)}
onMouseOut={this.mouseOutHandler.bind(this)}>Hello World</div>;
}
mouseOutHandler(e){
this.setState({color:"red"});
}
mouseOverHandler(e){
this.setState({color:"blue"});
}
clickHandler(e){
this.setState({color:"blue"});
}
}
window.addEventListener("load", ()=>{
ReactDOM.render(<MyHead level="3"/>, document.body);
})
</script>
</head>
</html>
小結
回顧上面我們知道 React Element 和 JSX 的事件處理,以及如何實作事件。並在最後提供完整的程式碼讓大家可以測試使用看看。
Refernece
Author Leefu Chen
LastMod 2018-05-07