React中文文件之Handling Events
React元素的事件處理同DOM元素的事件處理非常相似。
有一些語法不同:
1.React事件使用 'camelCase-駝峰式' 命名,而不是 'lowercase-小寫字母'
2.使用JSX,傳遞一個函式作為事件處理,而不是字串
例如:
HTML程式碼:
<button onclick="activateLaser()">
Activate Lasers
</button>
略微不同於React:
<button onClick="{activateLaser}"> Activate Lasers </button>
另一個不同是,在React中,不能返回 'false' 來阻止預設行為。必須呼叫 'preventDefault'。例如,阻止連結開啟新頁面的預設行為:
HTML程式碼:
<a href="#" onclick="console.log('The link was clicked.'); return false">
Click me
</a>
React程式碼:function ActionLink() { function handleClick(e) { e.preventDefault(); console.log('The link was clicked'); } return ( <a href="#" onClick={handleClick}> Click me </a> ); }
這裡,'e' 是一個合成事件(synthetic event)。React根據 W3C規範 定義這些合成事件,因此不需要擔心跨瀏覽器的相容問題。可檢視 'SyntheticEvent' 章節學習更多
當使用React,通常不需要呼叫 'addEventListener',給已經建立的DOM元素新增事件監聽。僅當最初渲染元素時,提供一個監聽器來代替。
當使用ES6類,定義了一個元件,一個常見的模式是:一個事件處理可定義為該類的一個方法。例如:Toggle元件來渲染一個按鈕,允許使用者切換 'ON' 和 'OFF' 狀態:
class Toggle extends React.Component { constructor(props) { super(props); this.state = {isToggleOn: true}; // This binding is necessary to make `this` work in the callback this.handleClick = this.handleClick.bind(this); } handleClick() { 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' 的意思。在JS中,類方法預設沒有被繫結。如果你忘記繫結 'this.handleClick',並且傳遞給 'onClick',當函式被真實呼叫時,'this' 將會是 'undefined'。
這不是React特有的行為;它是 'JS中函式如何工作' 的一部分(是js的語法)。通常,如果你涉及一個方法,沒有 '()' 跟在方法名後面,例如:onClick={this.handleClick},你應該繫結這個方法。
如果呼叫 'bind' 使你苦惱,有2種方法可以繞過這個。如果你正在使用實驗性的 'property initializer syntax-屬性初始化語法',你可以使用屬性初始化來正確的繫結回撥:
class LoggingButton extengs React.Component {
// This syntax ensures `this` is bound within handleClick.
// Warning: this is *experimental* syntax.
handleClick = () => {
console.log('this is:', this);
}
render() {
return (
<button onClick={this.handleClick}>
Click me
</button>
);
}
}
使用 'Create React App' 方式建立專案(安裝方式的一種),這個解析是預設啟用的。
如果你沒有使用屬性初始化語法,你可以在回撥函式中,使用一個 '箭頭函式'(arrow function),例如:
class LoggingButton extengs React.Component {
handleClick = () => {
console.log('this is:', this);
}
render() {
// This syntax ensures `this` is bound within handleClick
return (
<button onClick={(e) => this.handleClick(e)}>
Click me
</button>
);
}
}
這種語法的問題是:每次 'LoggingButton' 渲染,都會建立一個不同的回撥函式。在大多數情況下,是沒問題的。然而,如果這個回撥函式作為一個prop傳遞給低階元件(內部元件),這些元件,可能執行一次額外的重新渲染。我們一般推薦在構造器中繫結,避免這型別的效能問題。
相關推薦
React中文文件之Handling Events
Handling Events - 事件處理React元素的事件處理同DOM元素的事件處理非常相似。有一些語法不同:1.React事件使用 'camelCase-駝峰式' 命名,而不是 'lowercase-小寫字母'2.使用JSX,傳遞一個函式作為事件處理,而不是字串例如
React中文文件之Rendering Elements
Rendering Elements - 渲染元素元素是React應用的最小構建塊一個元素描述了你想要在螢幕上看到的內容: const element = <h1>Hello, world</h1>;不同於瀏覽器的DOM元素,React元素是普通物
React中文文件之Forms
Forms - 表單在React中,HTML表單元素同其他DOM元素,有點不同。因為表單元素天生具備一些內部的state狀態。例如:下面的HTML表單接收一個名字: <form> Name: <input type="text" name="
Chromium Embedded Framework中文文件之(基本使用)
視窗建立之前 (HandleBeforeCreated),客戶端可用之取消與定製瀏覽器視窗建立過程。視窗建立之後(HandleAfterCreated). 可用於建立自定義的CefJSHandler物件。位址列更新(HandleAddressChange). 將位址列更改為指定的字串,通知發生於導航提交後與頁
IdentityServer4系列之中文文件及實際專案經驗分享
0、前言 原文:http://docs.identityserver.io/en/release/宣告: 1、目錄一至五章節根據IdentityServer英文文件翻譯而來,有些內容會根據自己的理解來表述的(包括標題),文件的內容會不斷的更新。 2、第六章節會進行闡述在實際專案中所用的內容以及問題 &
DL4J中文文件/開始/Eclipse DL4J示例之旅
DL4J示例調研 DL4J的Github倉庫有很多示例可以涵蓋它的功能。快速入門向你展示瞭如何設定Intellij並克隆倉庫。本頁提供這些例子中的一些概述。 DataVec 示例 大多數示例都使用DataVec,這是一個通過歸一化,標準化,搜尋和替換,列洗牌和向量化
React-Redux 中文文件
介紹 快速開始 React-Redux是Redux的官方React繫結庫。它能夠使你的React元件從Redux store中讀取資料,並且向store分發actions以更新資料 安裝 在你的React app中使用React-Redux: npm install
《React官方文件》之Why React?
原文連結 譯者:羅澤軒 為什麼使用React? React作為創造使用者介面的JavaScript庫,在Facebook和Instagram中被廣泛使用。許多人視React為MVC中的V。React的誕生,就為解決一個問題:如何建立基於變化資料的大型應用。 簡單(Simple) 簡單地陳述
《React官方文件》之Getting Started
原文連結 譯者:jella77 JSFiddle 開始React最簡單的方法就是遵循JSFiddle的Hello World例子: 入門包 如果你剛剛起步,你可以下載Starter Kit。Starter Kit包含為瀏覽器預製的React和React DOM,以及幫助你開始的示例。
《React官方文件》之Forms
原文連結 譯者:黃文海 表單(Forms) 諸如<input>、<textarea>和 <option>的表單元件與其它原生(native)元件不同,因為它們可以通過使用者互動而被改變。這些元件提供的介面使得管理表單對使用者互動的響應更加容易。 有關
《React官方文件》之教程Tutorial
原文連結 譯者:jella77 教程Tutorial 我們建立一個簡單但實際的評論框,Disqus, LiveFyre或Facebook可以提供實時評論,評論框可以放在一個部落格中。 我們提供: 可以看到所有評論的檢視 提交評論的表單 通過Hooks可以自定義後端 它有如下特點: 優
Keras:基於Theano和TensorFlow的深度學習庫之中文文件
本部落格主要給出某些必備的部分(一直更新中),詳細內容請移步至Github以及MoyanZitto的主頁。 第一部分:快速開始Keras Keras的核心資料結構是“模型”,模型是一種組織網路層的方式。Keras中主要的模型是Sequ
程序中的文件之沙盒以及plist文件的初步使用
ice b2c ng- 可見 ngs 函數 用戶 nsdata nss 沙盒是相對於“應用程序”的文件,也就是相相應app所在的頁面的文件。 每個應用都有自己的應用沙盒(應用沙盒就是文件系統文件夾)。與其它文件系統隔離。應用必須呆在在積極的沙盒中。其它的應用不可以訪問沙
【React Native開發】React Native控件之ProgressBarAndroid進度條解說(12)
ice 發現 來講 top 文章 func dev all ios 轉載請標明出處:http://blog.csdn.net/developer_jiangqq/article/details/50596367本文出自:【江清清的博客】(一)前言 【好消息】
Linux用戶相關文件之/etc/pssswd文件
理論 shel etc 開放 登錄 passwd 重復 login 由於 1.文件地址: /etc/pssswd -rw-r--r--. 1 root root 936 10月 6 12:50 /etc/passwd 2.文件內容: xiaol_1:x:501
Linux用戶相關文件之組文件
linu 文件內容 刪除 應該 說明 信息 oot gid 通過 組信息文件: 1.文件地址: /etc/group -rw-r--r--. 1 root root 492 10月 6 21:56 /etc/group 2.文件內容:
Nginx(五)-- 配置文件之Rewrite
log 技術分享 判斷 placement ble png per 大小寫 遠程 Rewrite支持URL重寫 1.常用指令以及語法 1) if指令 if語法: if 空格 (condition) {} 條件: 1. &ld
ajax異步上傳文件之data參數----小哈學js
style var 屬性 ada 數據 value lap sed $.ajax 下載ajaxFileUpload.js(下載網址:http://fileuploadajax.codeplex.com/downloads/get/20976) 修改ajaxFileUplo
Solr 配置文件之schema.xml
standard 不同的 文檔 Coding 指向 hand 微軟 等價 core schema.xml這個配置文件的根本目的是為了通過配置告訴Solr怎樣建立索引。 solr的數據結構例如以下: document:一個文檔、一條記錄
Shell-3-文件之名
roo count 差集 class 表示 /dev/zero tex font 1.0 1.生成任意大小的文件 [[email protected]/* */ tmp]# dd if=/dev/zero of=junk.data bs=1M count=1