
- ReactJS 教程
- ReactJS - 首頁
- ReactJS - 簡介
- ReactJS - 路線圖
- ReactJS - 安裝
- ReactJS - 特性
- ReactJS - 優點與缺點
- ReactJS - 架構
- ReactJS - 建立 React 應用程式
- ReactJS - JSX
- ReactJS - 元件
- ReactJS - 巢狀元件
- ReactJS - 使用新建立的元件
- ReactJS - 元件集合
- ReactJS - 樣式
- ReactJS - 屬性 (props)
- ReactJS - 使用屬性建立元件
- ReactJS - props 驗證
- ReactJS - 建構函式
- ReactJS - 元件生命週期
- ReactJS - 事件管理
- ReactJS - 建立一個事件感知元件
- ReactJS - 在 Expense Manager 應用程式中引入事件
- ReactJS - 狀態管理
- ReactJS - 狀態管理 API
- ReactJS - 無狀態元件
- ReactJS - 使用 React Hooks 進行狀態管理
- ReactJS - 使用 React Hooks 的元件生命週期
- ReactJS - 佈局元件
- ReactJS - 分頁
- ReactJS - Material UI
- ReactJS - Http 客戶端程式設計
- ReactJS - 表單程式設計
- ReactJS - 受控元件
- ReactJS - 非受控元件
- ReactJS - Formik
- ReactJS - 條件渲染
- ReactJS - 列表
- ReactJS - 鍵
- ReactJS - 路由
- ReactJS - Redux
- ReactJS - 動畫
- ReactJS - Bootstrap
- ReactJS - 地圖
- ReactJS - 表格
- ReactJS - 使用 Flux 管理狀態
- ReactJS - 測試
- ReactJS - CLI 命令
- ReactJS - 構建和部署
- ReactJS - 示例
- Hooks
- ReactJS - Hooks 簡介
- ReactJS - 使用 useState
- ReactJS - 使用 useEffect
- ReactJS - 使用 useContext
- ReactJS - 使用 useRef
- ReactJS - 使用 useReducer
- ReactJS - 使用 useCallback
- ReactJS - 使用 useMemo
- ReactJS - 自定義 Hooks
- ReactJS 高階
- ReactJS - 可訪問性
- ReactJS - 程式碼分割
- ReactJS - 上下文
- ReactJS - 錯誤邊界
- ReactJS - 轉發 Refs
- ReactJS - 片段
- ReactJS - 高階元件
- ReactJS - 與其他庫整合
- ReactJS - 最佳化效能
- ReactJS - Profiler API
- ReactJS - 埠
- ReactJS - 無 ES6 ECMAScript 的 React
- ReactJS - 無 JSX 的 React
- ReactJS - 調和
- ReactJS - Refs 和 DOM
- ReactJS - 渲染 Props
- ReactJS - 靜態型別檢查
- ReactJS - 嚴格模式
- ReactJS - Web Components
- 其他概念
- ReactJS - 日期選擇器
- ReactJS - Helmet
- ReactJS - 內聯樣式
- ReactJS - PropTypes
- ReactJS - BrowserRouter
- ReactJS - DOM
- ReactJS - 走馬燈
- ReactJS - 圖示
- ReactJS - 表單元件
- ReactJS - 參考 API
- ReactJS 有用資源
- ReactJS - 快速指南
- ReactJS - 有用資源
- ReactJS - 討論
ReactJS - CompositionEvent 處理程式
CompositionEvent 是一個 Web 開發概念,主要指使用者在網頁上輸入和提交文字。它主要涉及使用者間接輸入文字時發生的事件。基本上,可以將其理解為使用者在鍵盤上打字時發生的事件,但特別關注可能需要更復雜處理的語言和輸入法。
因此,我們可以說 CompositionEvent 是一種在使用者在網頁上輸入內容時觸發的事件型別。它處理可能帶有重音或其他複雜字元的語言。它就像一個幕後事件,幫助 Web 開發人員有效地管理文字輸入過程。
語法
<input onCompositionStart={e => console.log('run on Composition Start')} onCompositionUpdate={e => console.log('run on Composition Update')} onCompositionEnd={e => console.log('run on Composition End')} />
引數
CompositionEvent 介面中的 data 屬性是一個特殊的訊息,根據其使用時間提供不同的資訊 -
CompositionEvent 介面中的 data 屬性是一個特殊的訊息,根據其使用時間提供不同的資訊 -
e - 它是一個簡單的 React 事件物件。
compositionStart - 對於“compositionStart”事件,它告訴我們我們在開始輸入新內容之前選擇的文字。即使我們修改了選擇,此訊息仍然會告知我們開始時選擇了什麼。
compositionStart - 對於“compositionUpdate”事件,它告訴我們我們在輸入時的文字。當我們調整文字時,它會發生變化。
compositionEnd - “compositionend”事件顯示已新增到文件或“提交”到編輯器中的文字。這是我們完成書寫並確認文字後保留的內容。
它有什麼用?
CompositionEvents 對 Web 開發人員很有用,因為它們提供了有關文字輸入過程的資訊,這在處理複雜字元或其他輸入方法時尤其有用。它使開發人員能夠建立更靈活、更使用者友好的文字輸入體驗。
示例
示例 - 特殊字元應用程式
讓我們看看如何在 React JS 應用程式中使用 CompositionEvent 的基本示例。假設我們要管理特殊字元的輸入。
import React, { useState } from "react"; function App() { const [textInput, setTextInput] = useState(""); const handleCompositionStart = (e) => { console.log("Composition Start"); }; const handleCompositionUpdate = (e) => { // Check if it is a CompositionEvent if (e instanceof CompositionEvent) { // Update the state setTextInput(e.data); } }; const handleCompositionEnd = (e) => { console.log("Composition End"); }; const handleInput = (e) => { // This event handles regular text input setTextInput(e.target.value); }; return ( <div> <input type="text" onCompositionStart={handleCompositionStart} onCompositionUpdate={handleCompositionUpdate} onCompositionEnd={handleCompositionEnd} onInput={handleInput} /> <p>Text Input: {textInput}</p> </div> ); } export default App;
輸出

在上面的程式碼中,當用戶開始建立文字時會呼叫 handleCompositionStart 方法,當用戶停止編寫文字時會呼叫 handleCompositionEnd 函式,當用戶更新文字時會呼叫 handleCompositionUpdate 方法。
這些函式分別與 onCompositionStart、onCompositionUpdate 和 onCompositionEnd 事件關聯。
示例 - 表情符號選擇器應用程式
此應用程式將是一個帶有表情符號選擇器的輸入欄位,該選擇器使用組合事件來允許使用者輕鬆輸入表情符號。此程式碼定義了一個 EmojiPicker 元件,該元件獲取表情符號資料。它使用 useEffect hook 從 API(例如 GitHub 表情符號 API)獲取表情符號資料或載入靜態列表。此應用程式的程式碼如下所示 -
App.js
import React, { useState } from 'react'; import EmojiPicker from './EmojiPicker'; function App() { const [text, setText] = useState(''); const [showEmojiPicker, setShowEmojiPicker] = useState(false); const handleChange = (event) => { setText(event.target.value); }; const handleEmojiPick = (emoji) => { setText(text + emoji); setShowEmojiPicker(false); }; const handleCompositionStart = () => { // Hide emoji picker if composition starts setShowEmojiPicker(false); }; const toggleEmojiPicker = () => { setShowEmojiPicker(!showEmojiPicker); }; return ( <div> <input value={text} onChange={handleChange} onCompositionStart={handleCompositionStart} /> <button onClick={toggleEmojiPicker}>Toggle Emoji Picker</button> {showEmojiPicker && <EmojiPicker onEmojiPick={handleEmojiPick} />} </div> ); } export default App;
EmojiPicker.js
import React, { useState, useEffect } from 'react'; const EmojiPicker = ({ onEmojiPick }) => { const [emojiList, setEmojiList] = useState([]); useEffect(() => { // Fetch emoji data from an API fetch('https://api.github.com/emojis') .then((response) => response.json()) .then((data) => setEmojiList(Object.keys(data))); }, []); const handleEmojiClick = (emoji) => { onEmojiPick(emoji); }; return ( <div className="emoji-picker"> {emojiList.map((emoji) => ( <button key={emoji} onClick={() => handleEmojiClick(emoji)}> {emoji} </button> ))} </div> ); }; export default EmojiPicker;
輸出

該應用程式遍歷 emojiList 並將每個表情符號呈現為按鈕。點選表情符號會呼叫 handleEmojiClick 函式,該函式透過 onEmojiPick prop 將所選表情符號傳遞迴父元件。
示例 - 統計單詞應用程式
此應用程式演示了一種簡單的方法,可以使用組合事件即時統計單詞。在此應用程式中,使用者可以在文字框中輸入內容。當用戶撰寫文字時,會觸發 onCompositionUpdate 事件。該應用程式計算組合文字中的單詞數並顯示計數。
import React, { useState } from 'react'; function App() { const [currentText, setCurrentText] = useState(''); const [wordCount, setWordCount] = useState(0); const handleChange = (event) => { setCurrentText(event.target.value); }; const handleCompositionStart = () => { console.log('Composition Start'); }; const handleCompositionUpdate = (event) => { if (event instanceof CompositionEvent) { setCurrentText(event.target.value); } }; const handleCompositionEnd = () => { const words = currentText.split(/\s+/); setWordCount(words.filter((word) => word !== '').length); console.log('Composition End'); }; return ( <div> <h2>Word Counter</h2> <textarea value={currentText} onChange={handleChange} onCompositionStart={handleCompositionStart} onCompositionUpdate={handleCompositionUpdate} onCompositionEnd={handleCompositionEnd} /> <p>Words: {wordCount}</p> </div> ); } export default App;
輸出

這是一個基本示例,但它展示了組合事件在建立互動式和響應式應用程式方面的潛力。
總結
CompositionEvent 是一個重要的 Web 開發概念,與使用者在網頁上的文字輸入相關,尤其是在處理需要複雜處理的語言和輸入方法時,例如帶有重音或特殊字元的語言。它在打字過程中觸發,並幫助 Web 開發人員有效地管理文字輸入。