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 - Hooks 进行状态管理 ReactJS - Hooks 的组件生命周期 ReactJS - 布局组件 ReactJS - 分页 ReactJS - Material UI ReactJS - Http 客户端编程 ReactJS - 表单编程 ReactJS - 受控组件 ReactJS - 非受控组件 ReactJS - Formik ReactJS - 条件渲染 ReactJS - 列表 ReactJS - Key 键 ReactJS - 路由 ReactJS - Redux ReactJS - 动画 ReactJS - Bootstrap ReactJS - Map 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 - Portals ReactJS - 不使用 ES6 ECMAScript ReactJS - 不使用 JSX 的 React ReactJS - Reconciliation ReactJS - Refs 和 DOM ReactJS - 渲染道具 ReactJS - 静态类型检查 ReactJS - 严格模式 ReactJS - Web 组件

其他概念

ReactJS - 日期选择器 ReactJS - Helmet ReactJS - 内联样式 ReactJS - PropTypes ReactJS - BrowserRouter ReactJS - DOM ReactJS - 轮播 ReactJS - 图标 ReactJS - 表单组件 ReactJS - 参考 API

ReactJS 有用资源

ReactJS - 快速指南 ReactJS - 备忘录 Axios - 备忘录 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) => {
      // 检查是否是 CompositionEvent
      if (e instanceof CompositionEvent) {
         // 更新状态
         setTextInput(e.data);
      }
   };   
   const handleCompositionEnd = (e) => {
      console.log("Composition End");
   };   
   const handleInput = (e) => {
      // 此事件处理常规文本输入
      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;

输出

text input

在上面的代码中,当用户开始创建文本时,handleCompositionStart 方法会被调用;当用户停止编写文本时,handleCompositionEnd 函数会被调用;当用户更新文本时,handleCompositionUpdate 方法会被调用。

这些函数分别与 onCompositionStart、onCompositionUpdate 和 onCompositionEnd 事件相关联。

示例 − 表情符号选择器应用

此应用将是一个带有表情符号选择器的输入字段,它使用组合事件让用户轻松输入表情符号。此代码定义了一个用于获取表情符号数据的 EmojiPicker 组件。它使用 useEffect Hooks(钩子)从 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 = () => {
      // 如果组合开始则隐藏表情符号选择器
      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(() => {
      // 从 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;

输出

airplane

该应用映射 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;

输出

word counter

这是一个基本示例,但它展示了组合事件在创建交互式和响应式应用程序方面的潜力。

摘要

CompositionEvent 是一个重要的 Web 开发概念,与网页上的用户文本输入有关,特别是在处理需要复杂处理的语言和输入法时,例如带有重音符号或特殊字符的语言和输入法。它在输入过程中触发,可帮助 Web 开发人员有效地管理文本输入。

reactjs_reference_api.html