- 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 開發人員有效地管理文字輸入。