React学习笔记(1.0)

TypeScript+Turborepo+SWC:构建开发者超级能力工具链 在现代前端工程中,'superpowers'并非玄学概念,而是指开发工具链具备的上下文感知、意图预判、错误规避与确定性保障四大能力。其技术根基在于 TypeScript 提供的类型契约、Turborepo 实现的任务拓扑感知,以及 SWC 支持的确定性编译注入。这种组合使构建速度突破人类感知阈值(<100ms),同时确保类型安全与缓存精度可验证,广泛应用于 API 契约同步、UI 视觉回归测试和上下文感知热重载等高价值场景。本文聚焦于如何基于 TypeScript、Turborepo 与 SWC 三角锚定, 阅读详情
AI摘要

博客介绍了使用vite创建react时SWC的相关知识,它是用于格式转换的工具,比Babel快20倍。还阐述了jsx与HTML的区别,如标签大小写、闭合要求等,以及样式的三种类型:行内、全局和局部样式,并给出了完整案例代码。

在使用vite创建react时,有一个语言选项,就是typescript-SWC,这里介绍一下SWC。

SWC:可扩展的Rust的平台,用于下一代快速开发工具,SWC比Babel快20倍。

简单来说,就是用于格式转换的,比Babel要快,所以在选择语言时,选择带SWC的就行,结构和不带SWC的一样。

在创建的项目的入口文件中

我们可以看到react-dom/client,这里分为两种,一种是客户端dom,另一个就是服务端dom,react-dom/server.根据不同的开发场景引入的createRoot不同。

二、jsx与HTML的区别 

①标签需要小写

在jsx中,标签需要小写,比如div,只能是<div></div>,而在HTML中大小写都可以。

②标签需要闭合

在,jsx中,标签需要闭合,比如input,需要写成<input />,而在HTML5中,可以不写闭合标签。

③class和for关键字

在jsx中,需要将class改成className(特指在定义类名时),另一个就是将for改成htmlFor(用于select标签)

④属性驼峰式写法

除自定义属性外,可以使用短横线的形式,标签中的属性需要使用驼峰命名的形式。

⑤类似与vue的插值语法(react貌似不这样叫)

就是{}形式,和vue中插值语法{{}}的用法一样,在里面可以写变量,三目运算符等js代码。

⑥属性使用大括号

这里需要注意区分vue中的插值语法

<div className={{active:true}}> hello world!</div>

里面的大括号是因为是对象

⑦添加注释

在jsx中,单行注释(快捷键:ctrl+/):

  {/* <button onClick={handleClick}>click me</button> */}

多行注释(快捷键:alt+shift+a):

  {/* <div className={myClass2}> hello world!</div>
      <button onClick={handleClick}>click me</button>
      <button onClick={handleClick2(123)}>click me2</button>
      <button onClick={(e)=>handleClick3(456,e)}>click me3</button> */}
⑧唯一根节点

这一点和vue2倒是挺像,就是外层只有一个div节点,如果有两个就直接报错了,其他的代码需要写在外层div的里面

return (
    <div>
      <div className={myClass.join(' ')}>App</div>
      <div className={myClass2}> hello world!</div>
      <button onClick={handleClick}>click me</button>
      <button onClick={handleClick2(123)}>click me2</button>
      <button onClick={(e)=>handleClick3(456,e)}>click me3</button>
      {list.map((item,index) => <li key={index}>{item}</li>)}
    </div>
  )

不过这也不是绝对的,可以使用Fragment的方式来进行解决

 return (
    <Fragment>
    <div>
      <div className={myClass.join(' ')}>App</div>
      <div className={myClass2}> hello world!</div>
      <button onClick={handleClick}>click me</button>
      <button onClick={handleClick2(123)}>click me2</button>
      <button onClick={(e)=>handleClick3(456,e)}>click me3</button>
      {list.map((item,index) => <li key={index}>{item}</li>)}
    </div>
    <div></div>
    </Fragment>
  )

另一种简写形式:

return (
    <>
    <div>
      <div className={myClass.join(' ')}>App</div>
      <div className={myClass2}> hello world!</div>
      <button onClick={handleClick}>click me</button>
      <button onClick={handleClick2(123)}>click me2</button>
      <button onClick={(e)=>handleClick3(456,e)}>click me3</button>
      {list.map((item,index) => <li key={index}>{item}</li>)}
    </div>
    <div></div>
    </>
  )

但是这种简写形式只限于Fragment标签没有key属性的情况下可以使用,一旦有属性,就会报错,因为我们无法给空标签加属性。

三、样式

样式分为三种,下面分别进行介绍。

①行内样式
<div style={{color:"purple",fontWeight:900}}>App2</div>

就是这样的style={对象}的形式,记得两个单词的样式要写成驼峰形式。

补充一下:就是在写长宽时,后面的px可以省略,默认就是px

②全局样式
//步骤一
import './css/_sass.scss'

//步骤二:书写css样式
$bg:red;

.box3{
    background: $bg;
}
.box2{
    color:blue;
}
.box1{
    border: 2px solid red;
}

//步骤三:在需要使用的地方使用

 const myClass = ['box1', 'box2']

  const myClass2 = classNames({
    box1:true,
    box2:true,
    [style.box5]:true
  })
③局部样式

这种貌似还是第一次见这样的

首先,建立css文件,这里注意要和全局样式的样式进行区分,全局样式建立文件直接是***.css,而局部样式的文件必须是***.module.css

然后正常书写css样式

然后是使用的时候:

这里类使用js的模块化,需要这样引入

import style from './css/closeStyle.module.css'

style可以随便起名,就是需要指定一个类似于模块名的名称

然后使用

const myClass2 = classNames({
    box1:true,
    box2:true,
    [style.box5]:true
  })

我上面的使用方式是以classname的方式使用的,这样在使用时更加方便,直接使用定义的变量名称

<div className={myClass2}> hello world!</div>

使用classname需要安装:

然后引入才可以使用:

import classNames from 'classnames'

 还有其他的方式用于样式的设置,这里暂时不再详细介绍:

①css-in-JS方案

②Tailwind CSS 方案

最后附上完整的案例代码:

import React from 'react'
import './css/_sass.scss'
import classNames from 'classnames'
import style from './css/closeStyle.module.css'
//引入Fragment
import {Fragment} from 'react'

const handleClick=(e:any)=>{
  console.log(e);
  // e不是原生事件
  //e.nativeEvent是原生事件
  
}
const handleClick2=(num:any)=>{
  return(e:any)=>{
    console.log(num);
    
  }
  // e不是原生事件
  //e.nativeEvent是原生事件
  
}
const handleClick3=(num:any,e:any)=>{
  console.log(num,e);
  
  
  // e不是原生事件
  //e.nativeEvent是原生事件
  
}
const App = () => {
  let list=['1','2','3'];

  // for(let i=0;i<list.length;i++){
  //   list[i]=<li>{list[i]}</li>
  // }

  const myClass = ['box1', 'box2']

  const myClass2 = classNames({
    box1:true,
    box2:true,
    [style.box5]:true
  })

  return (
    <>
    <div>
      <div className={myClass.join(' ')}>App</div>
      <div style={{color:"purple",fontWeight:900}}>App2</div>
      <div className={myClass2}> hello world!</div>
      <button onClick={handleClick}>click me</button>
      <button onClick={handleClick2(123)}>click me2</button>
      <button onClick={(e)=>handleClick3(456,e)}>click me3</button>
      {list.map((item,index) => <li key={index}>{item}</li>)}
    </div>
    <div></div>
    </>
  )
}

export default App

界面中的效果:

【React】Vite创建React+TS项目 阅读详情

相关推荐

create-react-app-swc:在 create-react-app 中使用 swc 以加快编译、开发和测试

:rocket: 创建React应用程序swc :rocket: 在使用以加快编译、开发和测试。 特征 javascript / 打字稿支持 开发时用swc替换babel-loader 用 swc 替换 babel-loader 以加快构建时间 运行 jest 测试时用 swc 替换 babel 入门 按照设置您的项目。 常问问题 为什么它更快? 在内部 create-react-app 使用 babel 编译应用程序的 javascript / typescript 文件。 通过使用 craco-swc,您可以使用编译器而不是 babel 来编译您的应用程序。 swc 是一个用 Rust 编写的超快速 javascript/typescript 编译器。 什么是 craco,为什么我需要它? (C reateřEACT甲PPÇonfigurationÒverride)是一个简单而易懂配置创建React的

TypeScript(五)知识扩展

TypeScript的一些配置项

聪明勇敢有力气的博客 2410

FortiOS路径遍历漏洞CVE-2022-41328实战复现:从环境搭建到漏洞利用全记录

本文深入解析FortiOS路径遍历漏洞CVE-2022-41328,从漏洞背景、影响范围到技术原理进行全面剖析。提供详细的漏洞复现环境搭建步骤和实战利用方法,并给出官方修复方案与临时缓解措施,帮助企业有效防御此类防火墙漏洞风险。

weixin_30485379的博客 523

React第五章(swc)

SWC 既可用于编译,也可用于打包。对于编译,它使用现代 JavaScript 功能获取 JavaScript / TypeScript 文件并输出所有主流浏览器支持的有效代码。简单点来说swc实现了和babel一样的功能,但是它比babel快。FAQ为什么快?编译型Rust 是一种编译型语言,在编译时将代码转化为机器码(底层的 CPU 指令)。这种机器码在执行时非常高效,几乎不需要额外的开销。解释型JavaScript 是一种解释型语言,通常在浏览器或 Node.js 环境中通过解释器运行。

qq1195566313的博客 3134

打造会自主学习的 AI 助手:OpenClaw 记忆系统完全指南

这不是科幻,这是我正在使用的系统。我的 AI 助手「小琳」已经运行了一段时间,积累了大量的知识和经验,而且还在不断学习成长。心跳(Heartbeat)是 OpenClaw 的定时轮询机制,可以让 AI 主动做一些事情。你有没有遇到过这样的困扰:每次和 AI 对话,它都像失忆了一样,之前聊过的内容完全不记得?设置定时任务:每天早上 8 点,查询天气和热点新闻,通过钉钉推送给我。让你的 AI 助手拥有持久记忆,能够自主学习、总结经验、不断成长。这不仅仅是一个「能记住事情的 AI」,而是一个。

Honmaple的博客 1634

基于TDOA的chan算法(定位算法)

Chan算法原理 TDOA(TDOA,the time differences of arrival,到达时间差),Chan算法是TDOA定位方法的一个很好用的方法。 Chan算法是非递归双曲线方程组解法,具有解析表达式解,主要特点是:在测量误差服从理想高斯分布时,它的定位精度高、计算量小,并且可以通过增加已确定点的数量来提高算法精度。 该算法的推导前提是基于测量误差为零均值高斯随机变量,对于实际环境中误差较大的测量值,比如在有非视距误差的环境下,该算法的性能会有显著下降。二维情况下,可分为只有三个点参与定

优快云不再更新 2万+

React Native v0.55 学习笔记1

React Native v0.55 学习笔记1 学习内容来自官网文档0.55版本 RN 是基于 React 的思想,相比于 web 的一些组件,RN 使用的是基于原生( android、ios )的组件。所以想用 RN 开发应用的话,就需要了解一些 React 方面的概念。例如 JSX,component,state 和 props。 Hello World RN 使用的是 J...

mmrx的博客 989

从VLM到VLA概论

智驾视觉大模型

xiaomu_347的博客 1714

React学习笔记1.0

React学习笔记1.0前提:您安装了nodejs创建React Appnpx create-react-app my-app cd my-app npm startmy-app是文件夹的名字,注意:需要在想建立磁盘/目录里面进行建立。

jiayoudangdang的博客 868

【变化检测】变化检测相关数据集+代码+论文合集

光学影像变化检测领域数据集(有label的,无label的)、高光谱影像变化检测领域数据集、3D变化检测领域数据集、传统变化检测算法、深度学习变化检测算法、SAR变化检测算法、高光谱变化检测算法论文及代码等资源。

向上生长的程序媛的博客 2089

Java与OSG的梦幻联动:深入编译OpenSceneGraph的Java JNI桥梁,开启3D视觉盛宴的奇幻之旅

🔥关注墨瑾轩,带你探索编程的奥秘!🚀🔥超萌技术攻略,轻松晋级编程高手🚀🔥技术宝库已备好,就等你来挖掘🚀🔥订阅墨瑾轩,智趣学习不孤单🚀🔥即刻启航,编程之旅更有趣🚀在编译OpenSceneGraph (OSG) 的Java版本时,首先需要了解OSG本身是一个主要用于3D图形和视觉仿真的开源库,它主要支持C++。然而,OSG 也支持通过JNI(Java Native Interface)与Java集成,这允许Java程序调用OSG的C++库。

java专栏 870

使用reactjs-popup创建React模态框(Modal)的完整指南

在现代Web开发中,模态框(Modal)是一种常见的UI组件,用于显示重要信息、收集用户输入或确认操作。reactjs-popup库提供了一种简单而强大的方式来创建React模态框,无需复杂的配置即可实现专业级的弹窗效果。 ## 基础模态框实现 使用reactjs-popup创建基础模态框非常简单,只需在Popup组件上添加`modal`属性即可: ```jsx import Popup f

gitblog_00215的博客 1285

SAP ERP 系统订单行项目中的计划行(Scheduled Line)详解

*计划行(Scheduled Line)**是SAP系统中订单行项目(如采购订单、生产订单、销售订单等)的细分单元,用于记录和管理物料的供应或需求计划。每个订单行项目可以包含一个或多个计划行,每个计划行对应具体的交货日期、数量、需求类型(如采购申请、生产订单、库存调拨等)以及相关的物流控制参数。简单来说,计划行是系统对某一物料在特定时间点的供需状态的详细规划,它将订单分解为更细粒度的执行步骤,确保供应链各环节(如采购、生产、仓储)能够按计划协同工作。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3391

ES6与ReactJS学习笔记

1.ES6 ES6,是ECMAScript 6 的简称,是JavaScript语言的下一代标准,已于2015年6月正式发布。 1.1. let于const 之前,我们在编写js定义变量的时候,只有一个关键字 var。var有一个问题,就是定义的变量会成为全局变量。 // var变量的作用域问题检查 for(var i = 0;i<5;i++){ console.log(i); } c...

fechinchu的博客 1812

【漏洞复现】用友U9 UMWebService.asmx 任意文件读取漏洞

用友U9存在任意文件读取漏洞,未授权的攻击者可以通过该漏洞读取服务器任意文件,造成敏感信息泄露。

qq_67810151的博客 620

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ReactJS 101代码规范终极指南:Airbnb React/JSX风格指南的实际应用

ReactJS 101作为React开发者的入门指南,不仅教授React基础知识,还特别强调了代码规范的重要性。在React开发中,遵循统一的代码规范是提升团队协作效率和代码质量的关键。本文将深入探讨如何在ReactJS 101项目中实际应用Airbnb React/JSX风格指南,帮助开发者编写更专业、更易维护的React代码。 ## 📋 为什么需要React代码规范? 在团队协作开发中,

gitblog_00879的博客 1816

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

从0到1学习reactjs-vite-tailwindcss-boilerplate:新手必备的10个实用技巧

想要快速构建现代化的React应用吗?reactjs-vite-tailwindcss-boilerplate正是你需要的终极解决方案!这个强大的项目模板集成了Vite、React 18、TypeScript、TailwindCSS 3等最流行的前端技术栈,让开发变得简单高效。无论你是React新手还是有经验的开发者,这个模板都能帮你节省大量配置时间,专注于业务逻辑的实现。🚀 ## 📦 1.

gitblog_01192的博客 652

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

react页面渲染之前_reactjs - 在react.js中渲染后滚动到页面顶部

reactjs - 在react.js中渲染后滚动到页面顶部我有一个问题,我没有想法,如何解决。在我的react组件中,我显示了一长串数据,底部显示了很少的链接。点击任何链接后,我用新的链接集合填写列表,需要滚动到顶部。问题是 - 如何在渲染新集合后滚动到顶部?'use strict';// url of this component is #/:checklistId/:sectionIdva...

weixin_29065015的博客 1613

ReactJS学习笔记八:动画

ReactJS学习笔记八:动画 分类:react学习笔记javascript2015-07-06 20:27321人阅读评论(0)收藏举报 react动画 目录(?)[+] 这里只讨论React的一个动画插件提供的动画机制,其他的通过自己写JS操作的动画都是一样的,和React没啥关系。 React.addons.CSSTran...

diaowojian9497的博客 162

React中swiper的配置(reactjs-swiper)

React中reactjs-swiper的使用与入坑 React中reactjs-swiper的使用与入坑 本文最先参考了https://www.cnblogs.com/cbp-jltx/p/9681838.html 但是,也不知道什么原因,swiperOptions始终不起作用,不知道是不是我自己的原因,但是通过一番摸索,我自己弄出了一套可行的办法。 总共分为六个步骤: 第一步: //npm install reactjs-swiper; // 先安装 reactjs-swiper; npm insta

weixin_43486426的博客 2871

【ReactJs学习笔记】【Chrome安装react审查插件&&组件】

目录 目录 Chrome安装react审查插件 组件 创建并导出组件 引用组件 尝试直接将新组件放置到对应标签 快捷链接 Chrome安装react审查插件 react developer tools拓展安装包下载 ClickHere&amp;amp;gt;&amp;amp;gt; 拖动下载了的.crx文件到拓展程序,显示如下 打开react项目,并用开发者工具,即可看到 ...

m0_37136491的博客 1601

深度掌握 ReactJS 高级概念:前端开发者必备

这篇文章汇总了 ReactJS 中值得深入研究的高级概念。读完后,不仅在前端面试中能更胸有成竹,还能自行开发一个类似 ReactJS 的 UI 库。目录Rendering 的含义与过程Re-rendering 发生的机制及原因Virtual DOM 的原理Reconciliation 算法的运行方式ReactJS 的性能优化方案1. 什么是 Rendering?它是如何进行的?在 React 中,...

粉丝们务必加入微信粉丝群 1918

掌握 ReactJS 基础概念

在 React 中,我们常提到 “渲染(Rendering)”。本质上,它是把 JSX 或通过 React.生成的元素转换为实际的 DOM 节点,让页面在浏览器中展现出来。JSX 与 React.JSX(Java XML)是一种 React 引入的语法糖。浏览器只能理解 Java,所以 JSX 需要先经过 Babel 编译成 React.的调用,才会生成所谓的 “React Element”(一个纯粹的 Java 对象)。// JSX 写法// 例子1</h1>;// Babel 转换后");

a6588433的博客 1244

reactjs-swiper 在react项目中实现轮播

1.快速新建项目 npx create-react-app swiper 2.安装依赖 yarn add reactjs-swiper axios --save-dev 3.文件目录 App.js import React, { Component } from 'react'; import './App.scss'; import SwiperBar from './Swip...

Twinkle的博客 5950

玩转Reactjs第一篇-构建工程(create-react-app)

一、前言 前期对vue的使用以及源码做了一些介绍和分析,vue由于其易用易学,性能高等特点,吸引越来越多的前端开发者在使用。作为前端框架的三剑客之一的Reactjs,得到了facebook社区大力支持,有着丰富的UI框架组件,用户群也大大多余vue,ng,算是老牌的前端框架。vue和reactjs的异同特性,网上也总结了非常多,但大部分都是概念性的泛泛而谈,本系列博客在学习Reactj...

恰恰虎的博客 2141

ReactJS 存储实战:用 RxDB 从 localStorage 走向离线优先应用

现代 **ReactJS** 应用往往需要在客户端存储数据:无论是保存简单的用户偏好,还是构建可离线使用的复杂功能,选择合适的**存储**方案都会直接决定开发体验与应用的健壮性。本文以 RxDB 为技术主线,从最基础的 `localStorage` 键值存储讲起,逐步过渡到基于 RxDB 的更强大、更具响应性的存储方案——涵盖离线能力、索引查询、`preact signals` 响应式编程,以及字

gitblog_01163的博客 904
上一篇: 第一个React程序
下一篇: 个人小结(2.0)
mez_Blog
mez_Blog 新星创作者: 前端开发技术领域 新星创作者: 前端开发技术领域
博客等级 码龄9年 1万+粉丝 346原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mez_Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值