初学React基础

news2025/1/10 21:03:51

        最近准备跟着黑马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组件直接写入js
      Hello 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 = video
    const 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.coloradmin.cn/o/1636071.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用 ArcGIS Pro 查找小区最近的地铁站

学习 GIS 除了可以用在工作上之外&#xff0c;还可以将其运用到生活之中&#xff0c;比如查找距离小区最近的地铁站&#xff0c;这里为大家介绍一下查找的方法&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的POI数据&#xff0c;除了POI数据…

Python流程控制

描述 Python中的流程控制是编程中用来控制代码执行顺序的结构。包括条件判断&#xff08;if语句&#xff09;、循环&#xff08;for循环和while循环&#xff09;、以及用于跳出或跳过循环的break和continue语句。 条件判断&#xff08;if语句&#xff09; if语句允许我们根据…

C++基础语法练习 - 求平均值

题目链接&#xff1a;https://www.starrycoding.com/problem/156 题目描述 在StarryCoding的语法班期末考试里&#xff0c; n n n名同学的成绩分别为 a 1 , a 2 , . . . , a n a_1, a_2, ..., a_n a1​,a2​,...,an​&#xff0c;请求出全班分数的平均值。 输入格式 第一行…

正则化回归

1. L1正则化 L1正则化是回归参数各个元素绝对值之和。 2. L2正则化 L2正则化是回归参数各个元素平方之和。 3.LOSS回归 线性回归加上L1正则化 4.岭回归 线性回归加上L2正则化 不断增大 L2 约束项参数 α&#xff0c;可以发现岭回归参数优化解不断靠近原点&#xff0c…

中职数字化校园网络建设

中职&#xff08;职校&#xff09;数字化校园的校园网建设立足于职业教育、职业学校的特点&#xff0c;充分注意到信息技术的飞速发展、通信成本的迅速降低的特点。在规划和建设校园网时&#xff0c;遵循以下原则&#xff1a; 采用通用和成熟的技术&#xff1a;采用通用的、成熟…

Android创建快捷方式到桌面

效果图 参考 https://blog.51cto.com/u_16175498/8811197https://blog.51cto.com/u_16175498/8811197 权限 <uses-permission android:name"com.android.launcher.permission.INSTALL_SHORTCUT" /> 实现 if (Build.VERSION.SDK_INT > Build.VERSION_C…

macOS 如何关闭文本编辑区的拼写检查?

macOS 如何关闭文本编辑区的拼写检查&#xff1f; 在使用 macOS 自带软件 Freeform 的时候&#xff0c;发现有些单词的拼写检查会一直显示红色下划线&#xff0c;很烦。 找了下&#xff0c;找到了如新关闭这种提示 之后就正常了&#xff1a;

软件测试经理工作日常随记【1】-测试用例

软件测试经理工作日常随记【1】-测试用例 1.测试用例 测试用例&#xff0c;好像是每个讲软测经验的文章的基本输出。各种测试用例的设计及白盒黑盒测试方法重复出现在收集者前面。so&#xff0c;不走寻常路的我&#xff0c;觉得从另外的角度去分享测试用例。日常工作中&#…

MYSQL数据目录结构上篇-表在文件系统中表示

前言感悟:我个人是比较不喜欢只会用,不太懂为什么的这么用,而且有的时候很多官方术 语让人难以读懂, 这里我会用比较大白话的方式,让我自己也能让网友们更加理解,如果书写哪里有误,欢迎大家指出((,,•ω•)ノ"(っω•&#xff40;。)) 从入门开始啦推荐一个学习mysql的视频…

Python urllib 爬虫入门(2)

本文为Python urllib类库爬虫更入门的一些操作和爬虫实例及源码。 目录 模拟浏览器请求 简单模拟 设置随机user-agent 请求超时 HTTP请求类型 Get请求 Post请求 抓取网页动态请求 封装ajax请求 调用 循环调用 抓取小说 封装请求函数 把html写入本地分析 调用 正…

Springboot+Vue项目-基于Java+MySQL的教学资料管理系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

bite阶段性测试_数据结构

解决问题之前我们要了解什么是度&#xff0c;特别是二叉树中的度&#xff0c;和图论中的度的定义是不同的 什么是度&#xff1a; 在图论中&#xff0c;一个节点&#xff08;或称为顶点&#xff09;的“度”是指与该节点直接相连的边的数量。度是用来衡量一个节点与其他节点连接…

CSS移动端弹性布局

一级标题 二倍图 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>背景图片</title><styl…

一个单例模式中使用std::unique_ptr引起的莫名其妙的COFF损坏的问题(未解决)

使用static std::unique_ptr和static std::shared_ptr都不行struct IElementAgendaEvents {//! Called to allow listeners to modify the agenda by adding/removing entries before applying tool operation. Return true if entries added or invalidated.virtual bool …

【机器学习】视觉基础模型的三维意识:前沿探索与局限

视觉基础模型的三维意识&#xff1a;前沿探索与局限 一、引言二、视觉基础模型的三维意识三、当前模型的局限性四、实验与结果五、总结与展望 大规模预训练的进展已经产生了具有强大能力的视觉基础模型。最近的模型不仅可以推广到任意图像的训练任务&#xff0c;而且它们的中间…

spring boot 基础案例【3】构建RESTful API与单元测试

教程1 案例教程 案例仓库 在线编程 教程2 基础教程 教程仓库 在线编程 本案例所在的仓库 本案例所在的文档 进入正文 1.文件目录 1. Chapter21Application.java 地址&#xff1a;chapter2-1/src/main/java/com/didispace/chapter21/Chapter21Application.java package com.d…

CSS @keyframes 动画:颜色变化、背景旋转与放大缩小

在CSS中&#xff0c;keyframes 是一个强大的工具&#xff0c;它允许我们创建复杂的动画效果。今天&#xff0c;我们将一起探索如何使用 keyframes 来实现颜色变化、背景旋转以及放大缩小的动画效果。 动画会在 2 秒内循环播放&#xff0c;并在不同的时间点改变盒子的背景颜色和…

【JVM】简述类加载器及双亲委派机制

双亲委派模型&#xff0c;是加载class文件的一种机制。在介绍双亲委派模型之前&#xff0c;我需要先介绍几种类加载器&#xff08;Class Loader&#xff09;。 1&#xff0c;类加载器 Bootstrap&#xff0c;加载lib/rt.jar&#xff0c;charset.jar等中的核心类&#xff0c;由…

VS code 同步odata服务

在做UI5得开发过程中&#xff0c;经常会出现odata需要更新 那么已经加载过得项目如何去跟新odata服务呢 可以通过如下步骤 1.右键打开应用信息 2.找到manage service models 3.点击编辑 4.选中 刷新并保存

前端发起网络请求的几种常见方式(XMLHttpRequest、FetchApi、jQueryAjax、Axios)

摘要 前端发起网络请求的几种常见方式包括&#xff1a; XMLHttpRequest (XHR)&#xff1a; 这是最传统和最常见的方式之一。它允许客户端与服务器进行异步通信。XHR API 提供了一个在后台发送 HTTP 请求和接收响应的机制&#xff0c;使得页面能够在不刷新的情况下更新部分内容…