react项目搭建、基础知识

前言

教学内容来源于黑马

黑马程序员前端React18入门到实战视频教程,从react+hooks核心基础到企业级项目开发实战

项目搭建

创建项目

pnpm create vite

选择框架
在这里插入图片描述
选择语言和构建
在这里插入图片描述
安装依赖并运行

pnpm install   
pnpm run dev

运行成功
在这里插入图片描述

基础知识

文件

main.jsx 项目的入口文件

// StrictMode在开发模式下默认开启严格模式,用于发现程序中的问题
import { StrictMode } from 'react'
// createRoot用于创建渲染器
import { createRoot } from 'react-dom/client'
import App from './App.jsx'
import './index.css'
// 创建渲染根节点,渲染react应用程序
createRoot(document.getElementById('root')).render(
  <StrictMode>
    <App />
  </StrictMode>,
)

App.jsx 应用程序的根组件

import { useState } from 'react'
import './App.css'

function App() {
  return (
    <div>11</div>
  )
}

export default App

JSX

JSX(JavaScript XML)是一种 JavaScript 的语法扩展,它允许你在 JavaScript 中书写类似于 HTML 的标签。JSX 是 React 生态系统中的一个重要组成部分,因为它使得编写组件变得更加直观和易于阅读。

const message = "Hello World";
function App() {
  return <div>{message}</div>;
}

export default App;

vue中的{{}}不同,react使用{}来解析变量、表达式

使用js表达式

jsx中使用{}识别JavaScript中的表达式,比如常量、函数调用等

const message = "Hello World";

const getName = () => {
  return "函数";
};

const user = {
  name: "张三",
  age: 18,
};
function App() {
  return (
    <div>
      {/* 使用引号传递字符串 */}
      <div>{"这是一个字符串"}</div>
      {/* 识别变量 */}
      <div>{message}</div>
      {/* 函数调用 */}
      <div>{getName()}</div>
      {/* 使用对象 */}
      <div>
        名称:{user.name},名称{user.age}
      </div>
    </div>
  );
}

在这里插入图片描述

列表渲染

const userList = [
  {
    id: 1,
    name: "张三",
    age: 18,
  },
  {
    id: 2,
    name: "李四",
    age: 19,
  },
];

function App() {
  return (
    <div>
      <ul>
        {userList.map((e) => {
          return (
            <li key={e.id}>
              姓名:{e.name},年龄:{e.age}
            </li>
          );
        })}
      </ul>
    </div>
  );
}

在这里插入图片描述
vue相似,列表渲染时也需要一个唯一的key值,字符串或者是数字

条件渲染

  • 简单判断
const isLogin = false;

function App() {
  return (
    <div>
      {/* 方式1:三元表达式 */}
      <div>是否登录:{isLogin ? "已登录" : "未登录"}</div>
      {/* 方式二,逻辑与 */}
      <div>
        是否登录:{isLogin && "已登录"}
        {!isLogin && "未登录"}
      </div>
    </div>
  );
}
  • 复杂判断
const articleType = 1; // 0、1、2

// 根据文章类型返回不同的模板
const getArticleTemplate = (type) => {
  if (type == 0) {
    return <div>我是文章模板1</div>;
  } else if (type == 1) {
    return <div>我是文章模板2</div>;
  } else {
    return <div>我是文章模板3</div>;
  }
};

function App() {
  return <div>{getArticleTemplate(articleType)}</div>;
}

事件绑定

const handleClick = () => {
  alert("被点击了")
}

function App() {
  return (
    <div>
      <button onClick={handleClick}>按钮</button>
    </div>
  )
}

使用事件对象参数

const handleClick = (e) => {
  console.log("事件对象:",e)
}

function App() {
  return (
    <div>
      <button onClick={handleClick}>按钮</button>
    </div>
  )
}

传递自定义参数

const handleClick = (name) => {
  console.log("参数:",name)
}

function App() {
  return (
    <div>
      <button onClick={()=>handleClick('点击了')}>按钮</button>
    </div>
  )
}

同时传递事件对象和自定义参数

const handleClick = (name,e) => {
  console.log("参数:",name,e)
}

function App() {
  return (
    <div>
      <button onClick={(e)=>handleClick('点击了',e)}>按钮</button>
    </div>
  )
}

组件

React中,一个组件就是首字母大写的函数,内部存放了组件的逻辑和视图UI,渲染组件只需要把组件当成标签书写即可

// 自定义组件
const MyButton = ()=>{
  const handleClick = (e)=>{
    console.log('点击了',e)
  }
  return <button onClick={handleClick}>点击</button>
}

function App() {
  return (
    <div>
      <MyButton></MyButton>
    </div>
  )
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/873344.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

极盾故事|某金融租赁机构应用数据保护新策略:“动态脱敏”“二次授权”

数据的流通使用是创新的动力&#xff0c;但安全和合规是不可逾越的底线。企业如何在这三者之间找到平衡点&#xff1f; 极盾科技&#xff0c;助力某金融租赁机构&#xff0c;基于极盾觅踪构建应用数据动态脱敏系统&#xff0c;实现10&#xff0b;核心应用系统的统一管理&#x…

磁电偶极子天线学习1 一种60GHz 宽带圆极化口径耦合磁电偶极子天线阵列

摘要&#xff1a; 一种新型的圆极化口径耦合天线被提出。这种圆极化磁电偶极子天线由刻蚀在短路基片集成波导的一部分的宽臂上&#xff0c;并且很容易被集成基片。在工作频段内实现了宽于28.8%的阻抗带宽和宽带3-dB的25.9%的轴比和的增益。此外&#xff0c;因为圆极化辐射由两个…

ModuleNotFoundError: No module named ‘mmcv.transforms‘

不得已的解决方法&#xff1a; mmcv升级到2.0.0即可解决 升级后自然又面临一系列不兼容问题&#xff01; 官方文档查漏补缺

HNU-2023电路与电子学-实验3

写在前面&#xff1a; 本次实验是完成cpu设计的剩余部分&#xff0c;整体难度比上一次要小&#xff0c;细心完成就能顺利通过全部测评 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能&#xff0c;设计 8 重 3-1 多路复用器。 3.分析模型机的功能…

基于python的Selenium webdriver环境搭建(笔记)

一、PyCharm安装配置Selenium环境 本文使用环境&#xff1a;windows11、Python 3.8.1、PyCharm 2019.3.3、Selenium 3.141.0 测试开发环境搭建综述 安装python和pycharm安装浏览器安装selenium安装浏览器驱动测试环境是否正确 这里我们直接从第三步开始 1.1 Seleium安装…

Python Flask_APScheduler定时任务的正确(最佳)使用

描述 APScheduler基于Quartz的一个Python定时任务框架&#xff0c;实现了Quartz的所有功能。最近使用Flask框架使用Flask_APScheduler来做定时任务&#xff0c;在使用过程当中也遇到很多问题&#xff0c;例如在定时任务调用的方法中需要用到flask的app.app_context()时&#…

828华为云征文|使用sysbench对Mysql应用加速测评

文章目录 ❀前言❀测试环境准备❀测试工具选择❀测试工具安装❀mysql配置❀未开启Mysql加速测试❀开启Mysql加速测试❀总结 ❀前言 大家好&#xff0c;我是早九晚十二。 昨天有梳理一篇关于华为云最新推出的云服务器产品Flexus云服务器X。当时有说过&#xff0c;这次的华为云F…

一个好用的Maven依赖冲突解决插件:Maven Helper

在项目开发&#xff0c;或项目Maven需要新增依赖、项目依赖组件升级时&#xff0c;经常会出现添加后&#xff0c;因为各个模块中有相同的依赖、不同的版本而导致依赖冲突&#xff0c;从而导致项目启动不起来&#xff0c;这种冲突非常恶心&#xff0c;因为是传递依赖所以会看不出…

vulhub ThinkPHP5.0.23远程代码执行漏洞

1.在vulhub打开环境 进入环境存在的文件 docker-compose up -d 2.浏览器访问环境 3.查看是否存在漏洞 /index.php?scaptcha 页面报错说明有可能存在 4.使用hackbar插件发送post请求 _method__construct&filter[]system&methodget&server[REQUEST_METHOD]dir…

排查SQL Server中的内存不足及其他疑难问题

文章目录 引言I DMV 资源信号灯资源信号灯 DMV sys.dm_exec_query_resource_semaphores( 确定查询执行内存的等待)查询性能计数器什么是内存授予?II DBCC MEMORYSTATUS 查询内存对象III DBCC 命令释放多个 SQL Server 内存缓存 - 临时度量值IV 等待资源池 %ls (%ld)中的内存…

高通智能模组:以卓越优势引领科技潮流

一、高通智能模组的崛起与发展 在通信技术发展中&#xff0c;高通智能模组出现。5G 兴起&#xff0c;对模组有更高要求&#xff0c;高通凭借积累和创新捕捉需求。早期致力于研发 5G 技术&#xff0c;优化技术降低功耗提高处理能力&#xff0c;展现性能优势。在竞争中&#xff0…

剪映剪辑影视视频字幕声音批量自动对齐教程

一款智能软件&#xff0c;用它结合剪映或CapCut 你就可以快速将一个视频翻译为另一种语言&#xff0c;非常适合做TikTok中视频的用户&#xff0c;无论是英语区法语区还是日语区&#xff0c;这款名为谷哥剪映助手的软件都能成倍提升你的剪辑效率。 让我来给大家介绍它的使用方法…

基于移动互联网的校内物业报修管理系统设计与实现(论文+源码)_kaic

基于移动互联网的校内物业报修管理系统设计与实现 摘  要 校园后勤服务对于学校的发展至关重要&#xff0c;它不仅是学校管理的基石&#xff0c;也是实现教育目标的关键因素&#xff0c;为学生提供优质的生活环境。如果学校能够提供出色的后勤保障&#xff0c;让师生无需担心…

【自动驾驶】控制算法(七)离散规划轨迹的误差计算

写在前面&#xff1a; &#x1f31f; 欢迎光临 清流君 的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落。&#x1f4dd; 个人主页&#xff1a;清流君_CSDN博客&#xff0c;期待与您一同探索 移动机器人 领域的无限可能。 &#x1f50d; 本文系 清流君 原创之作&…

【数据结构与算法】单向链表

【数据结构与算法】单向链表 文章目录 【数据结构与算法】单向链表前言一、单向链表初始化二、单向链表插入与遍历三、单向链表的删除与清空四、单向链表返回长度以及销毁五、完整代码六、单向链表企业版总结 前言 本篇文章就单向链表初始化&#xff0c;插入遍历功能&#xff…

Windows terminal使用说明

1 terminal基本介绍 1 下载 从微软商店上下载的方式网速比较慢&#xff0c;一种直接的方式是直接用命令行运行命令 winget install --idMicrosoft.WindowsTerminal -e# Window Terminal 安装以及使用(2021最新) 2 ssh配置 # 使用Windows Terminal进行SSH登录 1 通过label…

如何做好网络安全

随着互联网技术的飞速发展&#xff0c;网站已成为企业对外展示、交流和服务的重要窗口。然而&#xff0c;随之而来的网站安全问题也日益凸显&#xff0c;给企业的业务发展和用户数据安全带来了巨大威胁。因此&#xff0c;高度重视网站安全已成为网络安全的首要任务。今天我们就…

三相直流无刷电机(BLDC)控制算法实现:BLDC有感启动算法思路分析

一枚从事路径规划算法、运动控制算法、BLDC/FOC电机控制算法、工控、物联网工程师&#xff0c;爱吃土豆。如有需要技术交流或者需要方案帮助、需求&#xff1a;以下为联系方式—V 方案1&#xff1a;通过霍尔传感器IO中断触发换相 1.1 整体执行思路 霍尔传感器U、V、W三相通…

2024国赛数学建模A题B题C题D题E题思路资料模型

开始在本帖实时更新2024国赛数学建模赛题思路代码&#xff0c;文章末尾获取&#xff01; 持续更新参考思路

FPGA编译与部署方法全方位介绍

FPGA编译与部署是FPGA开发中的核心环节&#xff0c;涉及从代码编写、调试到将设计部署到FPGA硬件的全过程。这个流程需要经过创建项目、编写FPGA VI、模拟调试、编译生成比特流文件&#xff0c;最后将设计部署到硬件上运行。编译的特点在于并行执行能力、定制化硬件实现以及复杂…