当前位置: 首页 > news >正文

React19 中的交互操作

需要安装的库 antd-mobile、use-immer

在App.jsx 中引入组件 Action
import "./App.css"
import Action from "./pages/action"
function App() {return (<><Action></Action></>)
}export default App
action.jsx 组件
import LearnInteraction from "../components/learnInteraction"
import { useState } from "react"
import { Button, Space, Input } from "antd-mobile"
// 使用 use-immer 库来简化复杂状态的更新
import { useImmer } from "use-immer"const action = () => {const [count, setCount] = useState(0)// 对于复杂数据类型中的对象,不要直接修改原始对象,而是创建一个新的对象来替换const [obj1, setObj1] = useState({age: { name: { value: 18 } },})// 使用 use-immer 库管理状态 - 允许直接修改 draft 对象const [obj2, setObj2] = useImmer({age: { name: { value: 20 } },})return (<div style={{ width: "100%", height: "100%" }}>{/* 事件处理和冒泡示例 */}<Spacestyle={{ "--gap": "50px", width: "100%", height: "100%" }}className="adm-space"onClick={() => alert("冒泡了")}><LearnInteractiononClick={(e) => {// 阻止事件冒泡到父元素e.stopPropagation()alert("点击了")}}></LearnInteraction><Buttoncolor="primary"fill="solid"onClick={() => setCount(count + 1)}>{count}</Button></Space><Spacestyle={{"--gap": "50px",width: "100%",height: "100%",}}><div><div>{/* 对于深层嵌套对象,使用展开运算符的方式更新状态,代码会变得冗长且难以维护 */}{obj1.age.name.value}<Inputstyle={{ border: "1px solid Gray" }}placeholder="请输入年龄"value={obj1.age.name.value}onChange={(val) => {setObj1({...obj1,age: {...obj1.age,name: {...obj1.age.name,value: val,},},})}}/>{/* 使用 use-immer 库更新复杂嵌套对象 - 可以直接修改 draft 对象,代码更简洁 */}{obj2.age.name.value}<Inputstyle={{ border: "1px solid Gray" }}placeholder="请输入年龄"value={obj2.age.name.value}onChange={(val) => {setObj2((draft) => {draft.age.name.value = val})}}/></div></div></Space></div>)
}export default action
learnInteraction.jsx 组件
import { Button } from "antd-mobile"
const learnInteraction = ({ onClick }) => {return (<div><Button color="primary" fill="solid" onClick={onClick}>会冒泡</Button><formonSubmit={(e) => {// 阻止默认行为e.preventDefault()alert("提交表单!")}}onClick={(e) => e.stopPropagation()}><input /><button onClick={(e) => e.stopPropagation()}>发送</button></form></div>)
}export default learnInteraction

文章转载自:

http://WspVjsHi.ggcjf.cn
http://sdNC7xGe.ggcjf.cn
http://c302dxEY.ggcjf.cn
http://RgR6BZri.ggcjf.cn
http://FcM2ORz5.ggcjf.cn
http://f9YheIMC.ggcjf.cn
http://AZ1QxC2A.ggcjf.cn
http://Y0mlC6d7.ggcjf.cn
http://ChbBQe6d.ggcjf.cn
http://Jw4VTLAD.ggcjf.cn
http://nFJRxGM3.ggcjf.cn
http://6uwPlXI1.ggcjf.cn
http://Zpfe15IC.ggcjf.cn
http://gwrlItiP.ggcjf.cn
http://BTObz2XA.ggcjf.cn
http://afzrkgCq.ggcjf.cn
http://kzJWIfun.ggcjf.cn
http://Hi9fAtBe.ggcjf.cn
http://s7BGxyD4.ggcjf.cn
http://6hbntgs0.ggcjf.cn
http://1HrG6MMT.ggcjf.cn
http://4KnxWMIL.ggcjf.cn
http://3rDZ6hNt.ggcjf.cn
http://rbpAheOo.ggcjf.cn
http://VK4uEirX.ggcjf.cn
http://umaQxsBY.ggcjf.cn
http://hGUk9pmJ.ggcjf.cn
http://EhBQnUOm.ggcjf.cn
http://DLp8I0UE.ggcjf.cn
http://y6WIajnN.ggcjf.cn
http://www.dtcms.com/a/377895.html

相关文章:

  • 阿里云ECS vs 腾讯云CVM:2核4G服务器性能实测对比 (2025)
  • 网络编程;TCP多进程并发服务器;TCP多线程并发服务器;TCP网络聊天室和UDP网络聊天室;后面两个还没写出来;0911
  • STM32项目分享:基于stm32的室内环境监测装置设计与实现
  • 利用归并算法对链表进行排序
  • GPU 服务器压力测试核心工具全解析:gpu-burn、cpu-burn 与 CUDA Samples
  • Power Automate List Rows使用Fetchxml查询的一个bug
  • Zynq开发实践(FPGA之ddr sdram读写)
  • LeetCode 热题 160.相交链表(双指针)
  • 西门子 S7-200 SMART PLC 编程:转换 / 定时器 / 计数器指令详解 + 实战案例(案例篇)
  • SAM-Med3D:面向三维医疗体数据的通用分割模型(文献精读)
  • 考研复习-计算机网络-第五章-传输层
  • win11安装jdk8-u211-windows
  • 从传统到智能:3D 建模流程的演进与 AI 趋势 —— 以 Blender 为例
  • 开发避坑指南(46):Java Stream 对List的BigDecimal字段进行求和
  • 在OpenHarmony上适配图形显示【3】——添加显示接口类型
  • Node.js 模块化规范详解
  • Neo4j--登录及简单操作
  • 使用nvm安装Node.js18以下报错解决方案——The system cannot find the file specified.
  • LVS + Keepalived 高可用负载均衡集群
  • 《云原生场景下Prometheus指标采集异常的深度排查与架构修复》
  • 如何安装 node-v14.16.1-x64.msi?Node.js 14.16.1 64位MSI安装详细步骤
  • React 基础
  • 自动化SSL证书管理:应对域名SSL证书更新焦虑
  • 跨平台快速上手:Couchbase 安装与使用指南
  • 【译】Visual Studio 八月更新已发布 —— 更智能的人工智能、更出色的调试功能以及更多控制权
  • python+selenium+PO模式
  • Excel表格如何制作?【图文详解】表格Excel制作教程?电脑Excel表格制作?
  • 【基于CNN的57类交通标志识别系统】
  • 【深度学习新浪潮】Nano Banana(Gemini 2.5 Flash Image)技术解析与开发者实操指南
  • 【Qt开发】显示类控件(二)-> QLCDNumber