初学React基础

news/2024/5/19 7:14:44

        最近准备跟着黑马React学一下React,扩充一下技术面,打算还是以一边学习一边记笔记为主,进行学习!

1. React介绍

1.1. React是什么?

        React是由FaceBook现在称(Meta)开发的开源 JavaScript 库,主要用于构建用户界面,特别是单页应用(SPA)。它采用组件化的方式组织代码,使得复杂 UI 的开发和维护变得更为高效和灵活。

1.2. React的优势

        React相比于传统的 DOM 操作和页面构建方式,有更大的优势:

① 虚拟 DOM:React 使用虚拟 DOM(Virtual DOM)来提高性能。虚拟 DOM 是内存中的数据结构,当组件状态改变时,React 计算出最小的 DOM 更新,而不是直接操作实际 DOM,这减少了不必要的渲染和提升了性能。
② 组件化: React 应用基于组件构建,每个组件都是独立的、可复用的代码单元。这种方式促进了代码的模块化,提高了代码的可读性和可维护性。
③ JSX:JSX 语法使得在 JavaScript 中编写 HTML 代码变得简单,提高了开发效率。它允许开发者直接在组件内声明 UI 结构,使得代码更直观。
④ 单向数据流:React 应用通常遵循单向数据流的设计原则,即数据从父组件流向子组件,简化了数据管理和调试。
⑤ 性能优化:React 提供了如 shouldComponentUpdate、React.PureComponent 和 React.memo 等机制,帮助开发者优化性能,避免不必要的组件更新。

1.3. React的市场

        React目前在国内用的应该是没有Vue多的,它在国外还有国内一些中大厂比较流行。

2. 开始入门学习React

         这个是React的官方中文文档:React 官方中文文档,初学的时候可以进去看几眼。

2.1. create-react-app搭建React开发环境

        进行 React开发,首先要进行环境的开发,来看看咋搭建的吧!

        create-react-app 是一个快速创建React开发环境的工具,底层由Webpack构建,封装了配置细节,开箱即用,下面是指令的使用和介绍:

npx create-react-app first-react-project
1. npx Node.js工具命令,查找并执行后续的包命令
2. create-react-app 核心包(固定写法),用于创建React项目
3. react-basic React项目的名称(可以自定义)

 出了点状况,一直搭建不成功,查了一下npm的镜像,发现:

$ npm config get registry
https://registry.npmjs.org/

居然是这个,赶紧换成淘宝源:

npm config set registry https://registry.npm.taobao.org

重新运行create-react-app

终于成功了...使用WebStorm打开这个项目,启动一下还有看看目录结构:

npm start

(看到这个说明项目搭建成功了,hhh)

接着我们来看看这个项目的结构,下面我对主要的文件的文件夹进行了标注:

我们打开项目的入口文件index.js,如下代码介绍了:React入口文件就是把App根组件渲染到index.html中的<div id="root"></div>中,大概渲染路径就是App -> index.js -> public/index.html


// React的两个核心包
import React from 'react';
import ReactDOM from 'react-dom/client';// 导入项目的根组件
import App from './App';// 把App根组件渲染到id为root的dom节点上,其实就是index.html中的<div id="root"></div>
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<App />);

2.2. JSX基础学习

1. 基础概念

        JSX是JavaScript和XML(HTML)的缩写,表示在JS代码中编写HTML模版结构,它是React中编写UI模版的方式:

function App() {return (<div className="App">  // html组件直接写入jsHello React</div>);
}
export default App;

这种结合了html + Js写法的优势在于既拥有了HTML的声明式模版写法也拥有了JS的可编程能力,对于页面的操控会更加便捷。

        本质上JSX并不是标准的JS语法,它是JS的语法扩展,浏览器本身不能识别,需要通过解析工具比如Babel · Babel做解析之后才能在浏览器中运行,我们可以去官网试一试:

2. JSX中使用JS表达式

在JSX中可以通过 大括号语法{} 识别 JavaScript中的表达式,比如常见的变量、函数调用、方法调用等等,直接手写代码尝试,初学阶段要多写hhh:

function App() {const number = 1;const getNumber = () =>{return 100;}return (<div className="App">{/* 1.   使用引号传递字符串*/}{'hello world'}{/* 2.   使用Javascript变量*/}{number}{/* 3.   函数调用  */}{getNumber()}{/* 4.   方法调用  */}{new Date().getTime()}{/* 5.   使用JavaScript对象   */}<div style={{color:'red'}}>this is red</div></div>);
}
export default App;

3. JSX中实现简单列表渲染

function App() {const list = [{id: 1001, name:'Vue'},{id: 1002, name:'Java'},{id: 1003, name:'Cpp'},]return (<div className="App"><ul>{list.map(item => <li key={item.id}>{item.name}</li>)}</ul></div>);
}
export default App;

4. JSX中实现条件渲染

在React中,可以通过逻辑( if - else if - else )与运算符(&&)、三元表达式(?:)实现基础的条件渲染

function App() {const articleType = 1; // 1 = article, 2 = videoconst getArticle = () => {if(articleType === 1){return <div>我是文章</div>}else{return <div>我是视频</div>}}return (<div className="App">{getArticle()}</div>);
}
export default App;

2.3. React事件绑定

1. React基础事件绑定

语法:on + 事件名称 = { 事件处理程序 },整体上遵循驼峰命名法

2. 使用事件对象参数

语法:在事件回调函数中设置形参e

3. 传递自定义参数

语法:事件绑定的位置改造成箭头函数的写法,在执行clickHandler实际处理业务函数的时候传递实参,不能直接写函数调用,这里事件绑定需要一个函数引用。

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

语法:在事件绑定的位置传递事件实参e和自定义参数,clickHandler中声明形参,注意顺序对应

2.4. React组件

        一个组件就是用户界面的一部分,它可以有自己的逻辑和外观,组件之间可以互相嵌套,也可以复用多次。

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

2.5. useState

        useState 是一个 React Hook(函数),它允许我们向组件添加一个状态变量, 从而控制影响组件的渲染结果。本质:和普通JS变量不同的是,状态变量一旦发生变化组件的视图UI也会跟着变化(数据驱动视图)和之前学习过的Vue3.0使用ref 和 reactive是一样的效果

const [count, setCount] = useState(0);
1. useState是一个函数,返回值是一个数组
2. 数组中的第一个参数是状态变量,第二个参数是set函数用来修改状态变量
3. useState的参数将作为count的初始值

下面写一个实例进行测试:

import {useState} from "react";function App() {const [count, setCount] = useState(0);return (<div className="App"><button onClick={() => setCount(count + 1)}>count is {count}</button></div>);
}
export default App;

useState 修改状态的规则:

        在React中,状态被认为是只读的,我们应该始终替换它而不是修改它,直接修改状态不能引发视图更新。

import {useState} from "react";function App() {const [count, setCount] = useState(0);const clickHandler = () => {// 直接修改无法更新视图// count ++;// setCount(count);setCount(count + 1);}return (<div className="App"><button onClick={clickHandler}>count is {count}</button></div>);
}
export default App;

        对于对象类型的状态变量,应该始终传给set方法一个全新的对象来进行修改:

import {useState} from "react";function App() {const [user, setUser] = useState({name: "John",age: 20,email: "john@gmail.com"});const clickHandler = () => {// 直接修改原对象,不引发视图变化// user.name = "Jane";// 调用set传入新对象用于修改setUser({...user,name: "Jane",age: 30,email: "jane@gmail.com"});}return (<div className="App"><button onClick={clickHandler}>count is {user.name}</button></div>);
}
export default App;

2.6. 组件的CSS怎么写?

React组件基础的样式控制有俩种方式:

1. 行内样式(No!)

2. Class类名控制

        已经晚上了,今天就写到这儿吧! 


http://www.mrgr.cn/p/85511251

相关文章

硬件21、接线端子XH2.54、2.54排针排母、2510接插件、PH2.0、町洋接线端子5.08、ISP接口JTAG插座

XH2.54端子的间距为2.54毫米&#xff0c;2.54排针排母的间距也是2.54mm&#xff0c;2510接插件也是2.54、而PH2.0端子的间距为2.0毫米&#xff0c;町洋接线端子插针间的距离是5.08mm&#xff0c;ISP接口JTAG插座针脚的间距一般也是2.54mm XH2.54 针脚间距为2.54mm 插头 接线…

如何将 redis 快速部署为 docker 容器?

部署 Redis 作为 Docker 容器是一种快速、灵活且可重复使用的方式&#xff0c;特别适合开发、测试和部署环境。本文将详细介绍如何将 Redis 部署为 Docker 容器&#xff0c;包括 Docker 安装、Redis 容器配置、数据持久化、网络设置等方面。 步骤 1&#xff1a;安装 Docker 首…

WDS+MDT网络启动自动部署windows(十四)如何调试自定义任务脚本

简介: 为了使MDT在系统安装时执行自定义操作,可以写vbs脚本或wsf脚本。 调试这些脚本确实是很有难度的事,我在上一篇设置计算机描述的实验中,尝试了两天,才完成测试,为什么呢?因为每次测试都用模拟机安装一遍windows,最近一个月,真的超过了几百遍重装windows。 中断(…

OceanBase 助力同方智慧能源,打造安全可靠、高性能的能源数据架构

本文作者&#xff1a;丁泽斌&#xff0c;同方智慧能源数据库工程师 业务背景 作为同方股份有限公司旗下的领军企业&#xff0c;同方智慧能源集团矢志成为全球领先的综合智慧能源解决方案提供商。凭借中核集团和清华大学的科技实力&#xff0c;专注于向建筑、交通、工业、北方供…

Windows查找JDK的安装路径

如果很久之前安装了JDK&#xff0c;或者在别人的电脑上&#xff0c;想要快速指导JDK 的安装路径&#xff0c;可以通过啥方式指导JDK的安装路径是在哪里呢&#xff1f; 一、确认是否安装了JDK 首先我们打开命令行&#xff0c;如果输入 java -version 如果显示这种&#xff0c;…

二维泊松方程(Neumann+Direchliet边界条件)有限元Matlab编程求解|程序源码+说明文本

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

ruoyi漏洞总结

若依识别 黑若依 :icon hash"-1231872293 绿若依 :icon hash"706913071” body" 请通过前端地址访 " body" 认证失败&#xff0c;无法访问系统资源 " 如果页面访问显示不正常&#xff0c;可添加默认访问路径尝试是否显示正常 /login?redi…

OpenFeign修改HttpClient为Apache HttpClient 5

OpenFeign中http client 如果不做特殊配置&#xff0c;OpenFeign默认使用JDK自带的HttpURLConnection发送HTTP请求&#xff0c; 由于默认HttpURLConnection没有连接池、性能和效率比较低。所以修改为Apache HttpClient 5。 总结为两步&#xff1a; 加依赖改yml 具体操作请往…

开关门机关

根物体创建动画 子物体录制动画 ctrl6&#xff1a;调用动画窗口 添加关键帧&#xff1a;输入添加关键帧到第几帧&#xff0c;然后点击录制&#xff0c;最后在该物体的面板上修改其位置等&#xff0c;记得添加完要结束录制 搞个父物体是为了让动画的可移植性变高 设置触发器方…

这是一个简单的照明材料网站,后续还会更新

1、首页效果图 代码 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>爱德照明网站首页</title><style>/*外部样式*/charset "utf-8";*{margin: 0;padding: 0;box-sizing: border-box;}a{text-dec…

事件标志组

什么是事件标志组&#xff1f; 事件标志位&#xff1a;表明某个事件是否发生&#xff0c;联想&#xff1a;全局变量 flag。通常按位表示&#xff0c;每一个位表示一个事件&#xff08;高8位不算&#xff09;事件标志组是一组事件标志位的集合&#xff0c; 可以简单的理解事件标…

docker原理

Docker原理 在前面我们学习了Docker&#xff0c;接下来我们探究一下Docker的底层技术原理 Linux 命名空间&#xff08;namespace&#xff09;、控制组&#xff08;cgroups&#xff09;和 联合文件系统&#xff08;UnionFS&#xff09; 三大技术支撑了目前 Docker 的实现&…

【多级缓存】多级缓存OpenResty,Canal,nginx本地缓存

多级缓存 安装OpenRestyOpenResty入门OpenResty获取请求参数OpenResty向tomcat服务器发送请求 在nginx与tomcat端之间添加redis缓存Redis本地缓存缓存同步缓存同步策略基于Canal的异步通知安装Canal Canal客户端 安装OpenResty OpenResty是一个基于 Nginx的高性能 Web 平台&am…

路由器的构成

一、路由器简介 路由器是互联网中的关键设备&#xff1a; 连接不同的网络路由器是多个输入端口和多个输出端口的专用计算机&#xff0c;其任务是转发分组&#xff08;转发给下一跳路由器&#xff09;下一跳路由器也按照这种方法处理分组&#xff0c;直到该分组到达终点为止 …

Redisson 分布式锁和同步器

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 redisson 是基于redis的扩展库,使得redis除了应用于缓存以外,还能做队列…

mysql 远程无法连接

mysql 远程无法连接,解决办法:https://blog.csdn.net/Dontla/article/details/133213538

Vue工程化开发和脚手架Vue CLI

目录 一、介绍 二、使用步骤 1. 全局安装&#xff08;一次&#xff09; 2.查看Vue版本 3.创建项目架子&#xff08;项目名不能使用中文&#xff09; 4.启动项目 一、介绍 Vue CLI是Vue官方提供的一个全局命令工具。可以帮助我们快速创建一个开发的Vue项目的标准化基础架子…

深入学习Linux内核页框回收

目录 算法 1.选择目标页 2.PFRA设计 3.反向映射 3.1.匿名页的反向映射 3.2.try_to_unmap_anon()函数 3.3.try_to_unmap_one()函数 映射页的反向映射 优先搜索树 try_to_unmap_file()函数 PFRA实现 最近最少使用(LRU)链表 在LRU链表之间移动页 mark_page_accessed(…

《动手学深度学习》V2(00-10)

文章目录 一、学习目标二、环境搭建三、数据操作1、张量介绍2、运算符介绍3、广播介绍4、索引和切片5、节省内存6、课后练习实现 :fire: 四、数据预处理1、读取数据集2、处理缺失数据3、课后练习实现 :fire:①第一步&#xff1a;造数据②第二步 筛选遍历缺失值③第三步 统计降序…

三角函数公式推导

互补角 1如上图: \[\begin{eqnarray} 设AB=1, \quad 则AC=BM, \quad AM=BC \\ \\ \because \angle ACB=\angle AMB=90^{\circ}=\frac{\pi}{2} \\ \\ \therefore \angle ABC=\theta, \quad \angle ABM=\frac{\pi}{2}-\theta \\ \\ \\ \sin\theta=\frac{AC}{AB} \\ \\ \cos\thet…