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

日常随笔-React摘要

缺点

  • 社区维护,依赖社区

声明式编程

  • 告诉计算机你想要的结果(黑箱模型),而不用去关心一步步如何实现(和命令式编程恰好相反)
  • 在React中体现为使用者只需关注描述 UI 的状态,而不是操作DOM的细节,这不同于传统的命令式DOM操作
    • JSX视图:用类似HTML的语法表达界面应该长什么样
    • 用钩子函数 useState 来描述组件状态(状态即控制UI的数据)与 useEffect 处理副作用(Vue是通过 模版+指令系统v-if,v-for… 来描述状态,用 生命周期钩子 来处理副作用)
    • 条件渲染:通过条件判断语句
      • 用 if-else 分支赋值
      • 条件 ?运算符(工作于JSX内部): { isLoggedIn ? <User /> : <Login /> } (入股登录了就调用出 <User /> 否则就调用组件 <Login />
    • 渲染列表:通过 map 函数将这个数组转换为 < li > { item } < /li > 标签构成的列表
    • 路由控制: < Route path = “/home” element={<Home />} / >

函数式编程(Function Programming,FP)

  • 强调用纯函数构建程序,用函数处理数据、描述流程,而不是用对象和状态去驱动程序,避免共享状态和副作用
  • 纯函数的优点
    • 输入相同时输出永远相同,无副作用
    • 不修改原始数据,只返回新值
    • 也可以传入函数(高阶函数,比如工厂函数、记忆函数)

使用JSX编写标签

  • JSX本质是一种描述UI结构的声明式语法糖,最终会转换为 React.createElement( ) 函数式调用,这些函数会生成 虚拟DOM ,然后通过 diff 算法比对后更新真实DOM
    • 比如:< div className = “box” > Hi < /div >
    • 转为:React.createElement ( “div” , {className : “box” } ,“Hi” )
  • JSX 不是浏览器原生支持的内容,它只是React的一种写法,从 React17 开始,Babel插件或构建工具自动引入 import {jsx} from ‘react/jsx-runtime’
  • JSX会转义所有输入内容,防止攻击(可以通过 ={{_html:HTML}}显示转义前的内容)
  • 在JSX标签中可以通过 { } 中回到JS从而嵌入一些变量状态

响应事件:通过在组件中声明事件处理函数来响应事件

比如

return(

<button onClick = { CallBacks }>

按钮

</botton>

)

注意,这里的 CallBacks 是作为参数传入,而不是调用,不要加( )

onClick是React中的事件处理函数(等于Vue的setup中的 @click = “CallBacks” )

响应式更新

  • 通过 useState
  • 示例
import React, { useState } from 'react';
import './App.css';export default function MyApp(){return (<div><h1>独立计数器1和2</h1><MyButton /><MyButton /></div>);
}function MyButton(){const [cnt,changecnt] = useState(230);// 获取 状态 , 用于更新其的函数     // 状态初始值function Click(){changecnt( cnt+1 ); // 注意不能直接修改状态,而是得创建新的状态值}return(<button onClick={Click}>总共点了 {cnt} 次</button>)
}
  • 启动
    • npx create-react-app my-button-app
    • cd /Users/a86198/Desktop/JS/my-button-app && npm start
  • 注意:每个组件实例的数据不会互相污染,每个组件都会拥有自己的state,这是因为state是函数,利用了闭包的私密性

Hook钩子函数

  • 像上面的 useState 这种以 use 开头的函数
  • Hook钩子函数使用比普通函数更严格,只能在组件或其他Hook的顶部调用,比如如果你想在条件或者循环里面使用钩子就必须提取一个新组件在组件内部使用

组件间共享数据

  • 为了统一组件中的状态数据,需要将子组件分开的 state状态数据向上移动到最接近包含所有子组件的大组件中(最小公倍数的感觉)
export default function MyApp(){const [cnt,changeCnt] = useState(230);// 提前function Click(){changeCnt(cnt+1);}return (<div><h1>共同计数器</h1><MyButton /><MyButton /></div>)function MyButton(){return (<button onClick={Click}>总共点了 {cnt} 次</button>)}
}

使用这种方式传递的信息被称为 prop (单向数据传递机制)

文件框架

  • App.js 的代码创建一个根组件,通常在这里组织各个页面和组件

http://www.dtcms.com/a/292483.html

相关文章:

  • 【ROS/DDS】FastDDS :编写FastDDS程序实现与ROS2 通讯(四)
  • 深入浅出理解 TCP 与 UDP:网络传输协议的核心差异与应用
  • 平台端用户管理功能设计全解:从分类管控到审核闭环
  • 基于springboot的疫苗发布和接种预约系统(论文+开题报告)
  • 实现分布式锁
  • 腾讯云SDK
  • 论文笔记:Parameter Competition Balancing for Model Merging
  • MongoDB频繁掉线频繁断开服务的核心原因以及解决方案-卓伊凡|贝贝|莉莉|糖果
  • 在Windows 10/11上使用Qt和SOEM构建EtherCAT主站:工业控制新纪元
  • 【Axure视频教程】形状地图
  • Qt 事件处理机制深入剖析
  • 【OpenCV篇】OpenCV——01day.图像基础
  • 通俗易懂循环神经网络(RNN)指南
  • cookie基本使用
  • 如何用keepAlive实现标签页缓存
  • Samba 共享解决方案:微服务多机共享 `/app` 目录
  • Hugging Face 模型的缓存和直接下载有什么区别?
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 主页-微博基本信息实现
  • 程序代码篇---PID简介
  • 《计算机“十万个为什么”》之 MQ
  • 卷积神经网络:LeNet模型
  • STM32-GPIO理论部分1
  • 如何将iPad中的视频传输到电脑(6种简单方法)
  • 如何构建FunASR的本地语音识别服务
  • 出货奥地利,稳石氢能AEM氢户储应用方案撬动欧洲市场。
  • 智能文本抽取在法院卷宗管理的技术实现及优势
  • 记录解决问题--使用maven help插件一次性上传所有依赖到离线环境,spring-boot-starter-undertow离线环境缺少依赖
  • windows下nvm的安装及使用
  • 清华大学顶刊发表|破解无人机抓取与投递难题
  • 2025年COR SCI2区,基于多种配送模式的无人机自主配送车辆路径问题,深度解析+性能实测