【2024官方文档版】React快速入门

news/2024/9/23 22:27:33/

系列文章目录

一、快速入门【基础】

文章目录

  • 系列文章目录
  • 前言
  • 一、快速入门【基础】
    • 1. 创建一个组件
    • 2. 组件嵌入
    • 3.添加样式
    • 4.显示数据
    • 5.条件渲染
    • 6.渲染列表
    • 7.响应事件
    • 8.更新页面
    • 9.使用Hook
    • 10.组件间共享数据
  • 小结:


前言

偶然翻开React官方文档。觉得蛮有意思,总觉是入了坑
洋洋洒洒几千字,记录学习React的一段旅程
温故而知新 ^皿^


一、快速入门【基础】

在学习React之前,要学习的基础有这些:
HTML、CSS 和 JavaScript(三件套必会),ES6特性,node.js,npm/yarn(这俩现学也行,用的不深)

1. 创建一个组件

react是由组件组成的,组件小是一个按钮,大是一个页面,下面声明一个 按钮组件
注意:React是返回标签的一个js函数

function AButton(){return(<button> i am a button</button>)
}

React组件首字母必须大写!!!!HTML标签必须是小写字母
上面使用的是JSX(javascript XML)标签语法,比HTML更严格,标签必须闭合。
你创建的组件必须包裹在一个标签里面进行return,比如使用<div></div>或者空的<></>
注意return的后面是( ) 而不是{ }

2. 组件嵌入

刚刚我们声明了一个组件,将创建声明好的组件嵌入另一个写好的组件中

export default function MyApp() {return (<div><h1>Welcome to my app</h1><AButton /></div>);
}

效果如下:
在这里插入图片描述

3.添加样式

使用className,和HTML里面的class工作方式相同。css文件中编写样式再link引入即可

<img className="avater" />.avater{border-radius: 50%;
}

当你的样式需要写成变量时,可以使用如下方式:

<img style={{width:user.imgSize,height:user.imgSize
}}/>

4.显示数据

JSX可以把标签放到js代码中,而{}可以“回到”js中

className="avatar" 是将"avatar"字符串传递给 className
src={user.imageUrl}会读取 JavaScriptuser.imageUrl变量,然后将该值作为 src 属性传递,类似于Vue中的 :src="",读取的是js表达式而不是字符串。
还可以放入更加复杂的表达式,比如拼接字符串: alt={'photo of'+user.name}

return(<h1>{user.name}<img src={user.inmUrl} className="avater" alt={'photo of'+user.name}/></h1>
)

5.条件渲染

React是没有特殊语法的,使用普通的js代码,拿if语句举个栗子
AdminPanelLoginForm是提前写好的组件

let content
if(isLoggedIn){content = <AdminPanel />
}else{content = <LoginForm />
}return (<div>{content}</div>
);//使用条件运算符写这段代码
<div>{isLoggedIn ? (<AdminPanel />) : (<LoginForm />)}
</div>

没有else语句得话,可以使用&&

<div>{isLoggedIn && <AdminPanel />}
</div>

6.渲染列表

依赖js的特性,比如说使用for循环和arraymap()渲染组件列表
举个栗子
key属性的值来源于你的数据,作为唯一标识

//使用map()函数将一个数组转化成li标签构成的列表
const arrs = [{ name: 'ruru', id: 1, hobby: '吃饭' }, { name: 'fufu', id: 2, hobby: '睡觉' }]
export default function ArrTransList() {const listItems = arrs.map(arr =><li key={arr.id}>{arr.name}-{arr.hobby}</li>);return (<ul>{listItems}</ul>);
}

7.响应事件

在组件中声明事件处理 函数来响应事件
当用户点击按钮时 React 会调用你传递的事件处理函数。

//响应事件
function AButton() {function handleClick() {alert('按钮被点击了!')}
}return (//注意是传入`handleClick`,而不是直接调用事件处理的函数(没有小括号)<button onclick={handleClick}>点击就送!</button>
)

8.更新页面

数据变化,实时更新。比如一个按钮点击的次数。组件中要添加state

步骤1:引入userState
import {userState} from react;

步骤2:声明一个state变量
你将从userState钩子里获得当前的state和 更新state的函数
名字随意,按照(st , setSt)这个惯例最好。

import { useState } from 'react';function AButton() {// count是当前的state,setCount是更新它的函数,0是count的初始值const [count, setCount] = useState(0);function handleClick() {setCount(count + 1);}return (<button onClick={handleClick}>按钮点击了{count}</button>)}

第一次显示按钮count为0,点击按钮react调用组件函数,count会变成1,继续点击变成2

多次渲染同一个组件,每个组件都有自己的state
注意:每个按钮都会记录自己的count,不影响其他的按钮

export default function AApp() {return (<div><h1>不同按钮的点击次数统计:</h1><AButton /><AButton /></div>)
}

在这里插入图片描述

9.使用Hook

你问我什么是Hook,以use开头的函数叫做HookuseState就是React 提供的一个内置 Hook

可以根据现有的Hook编写属于自己的Hook
Hook比普通函数更加严格,只能在组件(或者其他Hook)的顶层调用Hook,如果想在条件或者循环语句去使用的话,最好封装一个组件在内部去使用Hook

使用请参考官方文档提供的Hook:React内置Hook

10.组件间共享数据

前面的栗子中,两个AButton都有独立的state,点击其中一个按钮,另一个不受影响。
但如果你想实现两个按钮数据同步更新,也就是共享state时,需要将state向上移动至包含它俩的组件,也就是本例子的AApp

import { useState } from 'react';
// 步骤3:prop信息传递,从读取父组件传递来的prop
function AButton({ count, onClick }) {return (<button onClick={onClick}>按钮点击了{count}</button>)
}export default function AApp() {// count是当前的state,setCount是更新它的函数//步骤1.state上移到AApp中const [count, setCount] = useState(0);function handleClick() {setCount(count + 1);}return (// 步骤2.将AApp中的点击处理函数和state数据向下传递到AButton中<div><h1>不同按钮的点击次数统计:</h1><AButton count={count} onClick={handleClick} /><AButton count={count} onClick={handleClick} /></div>)
}

首先把State向父组件AApp移动,接着我们将state数据和事件处理函数传给AButton,AButton读取从AApp传进来的prop。
整体执行过程:点击按钮,执行handleClick,count+1。新的count传入每个按钮,展示最新值,这被称为状态提升


小结:

刚开始学:哈哈哈,小case
学了一天的感受:
在这里插入图片描述

一入React深似海,还有那么多要学
继续加油继续肝…


http://www.ppmy.cn/news/1424795.html

相关文章

【随笔】Git 高级篇 -- 远程服务器拒绝 git push reset(三十二)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

单细胞RNA测序(scRNA-seq)cellranger count的细胞定量和aggr整合

单细胞RNA测序(scRNA-seq)基础知识可查看以下文章: 单细胞RNA测序(scRNA-seq)工作流程入门 单细胞RNA测序(scRNA-seq)细胞分离与扩增 单细胞RNA测序(scRNA-seq)SRA数据下载及fastq-dumq数据拆分 单细胞RNA测序(scRNA-seq)Cellranger流程入门和数据质控 细胞定量…

HarmonyOS实战开发-如何实现媒体提供方与媒体控制方自定义信息的交互功能。

介绍 本示例主要展示了媒体会话&#xff08;媒体控制方&#xff09;的相关功能&#xff0c;使用ohos.multimedia.avsession等接口实现媒体提供方与媒体控制方自定义信息的交互功能。 注意&#xff1a; 此示例中媒体控制方所使用的能力仅对系统应用开放&#xff0c;更多信息请参…

网络协议安全:SSL/TLS协议详解,SSL协议执行原理、报文格式解析,Wireshark抓包分析SSL协议

「作者简介」&#xff1a;2022年北京冬奥会中国代表队&#xff0c;CSDN Top100&#xff0c;学习更多干货&#xff0c;请关注专栏《网络安全自学教程》 SSL协议 1、SSL协议发展史2、SSL协议执行过程3、SSL报文格式字段解析3.1、TLS报文头3.2、Handshake报文 4、Wireshark抓包分析…

Ubuntu 22.04.4安装Docker引擎

正文共&#xff1a;1024 字 13 图&#xff0c;预估阅读时间&#xff1a;1 分钟 我们前面安装了几次Ubuntu的操作系统&#xff08;Ubuntu 23.10通过APT安装Open vSwitch&#xff09;&#xff0c;在开始之前&#xff0c;我还是简单提醒一下&#xff0c;从Ubuntu下载页面&#xff…

基于React Router6 TS实现路由守卫

定义路由表 import {BrowserRouter, Route, RouteObject, Routes,} from "react-router-dom"; import {Home, Login, NotFound} from "/views"; import {RouterGuard} from "/routers/router_guard.tsx"; import {ReactNode} from "react&…

ChatGPT与Python-GEE融合,遥感云大数据分析、管理与可视化

掌握Earth Engine的实际应用能力&#xff0c;以Python为基础&#xff0c;结合实例讲解平台搭建、影像数据分析、经典应用案例、本地与云端数据管理&#xff0c;以及云端数据论文出版级可视化等技能。 为提高教学质量&#xff0c;将融入ChatGPT 4、Claude Opus、Gemini、文心一…

什么是MOV视频格式?如何把MP4视频转MOV视频格式?

一&#xff0c;前言 当然可以&#xff0c;MP4视频可以转换为MOV格式。这两种格式都是常见的视频文件格式&#xff0c;它们都可以用于存储和播放视频内容。虽然它们的编码方式和特性有所不同&#xff0c;但使用合适的视频转换工具可以轻松地将MP4视频转换为MOV格式。 二&#…