- 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 开发人员有效地管理文本输入。