【React 框架】React 应用:基于 React 脚手架

article/2025/11/8 19:00:56

学习视频:尚硅谷React教程(2022加更,B站超火react教程)_哔哩哔哩_bilibili 


 一、创建 react 应用

1、react 脚手架概述

(1)xxx 脚手架:用来帮助程序员快速创建一个基于 xxx 库的模板项目。

        ① 包含了所有需要的配置(语法检查、jsx编译、devServer…)。 

        ② 下载好了所有相关的依赖。 

        ③ 可以直接运行一个简单效果。 

(2)react提供了一个用于创建react项目的脚手架库:create-react-app。 

(3)项目的整体技术架构为:react + webpack + es6 + eslint。 

(4)使用脚手架开发的项目的特点:模块化、组件化、工程化。

2、创建项目并启动

        我是直接按照以下博客流程操作的:

        React的环境搭建以及脚手架的安装 - 仰望星空的你 - 博客园 

3、react 脚手架项目结构

3.1 总体架构

3.2 index.html 

<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8" /><!-- %PUBLIC_URL%代表public文件夹的路径 --><link rel="icon" href="%PUBLIC_URL%/favicon.ico" /><!-- 开启理想视口,用于做移动端网页的适配 --><meta name="viewport" content="width=device-width, initial-scale=1" /><!-- 用于配置浏览器页签+地址栏的颜色(仅支持安卓手机浏览器) --><meta name="theme-color" content="red" /><metaname="description"content="Web site created using create-react-app"/><!-- 用于指定网页添加到手机主屏幕后的图标 --><link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" /><!-- 应用加壳时的配置文件 --><link rel="manifest" href="%PUBLIC_URL%/manifest.json" /><title>React App</title></head><body><!-- 若llq不支持js则展示标签中的内容 --><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body>
</html>

二、案例:Hello,React!

1、搭建基本结构

        基本结构:最重要的三个文件:index.html、App.js、index.js。

        组件:最外壳的组件是:App.js,两个子组件:Hello.js、Welcome.js。

2、实现的效果

3、code

3.1 public / index.html

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><!-- 设置标签页的图标 --><link rel="icon" href="%PUBLIC_URL%/favicon.ico" /><title>react脚手架</title>
</head><body><div id="root"></div>
</body></html>

 3.2 src / index.js

// 引入 react 核心库
import React from 'react'
// 引入 ReactDOM
// import ReactDOM from 'react-dom'
import { createRoot } from 'react-dom/client'
// 引入 App 组件
import App from './App.js'// React 18 中的更新的渲染方式写法
const con = document.querySelector('#root')
const root = createRoot(con)
root.render(<App />)

注意:

        原来我们渲染组件到页面时,用的是:ReactDOM.render(...,...) ,但是在 React 18 中报错说不让使用,并给出了新的渲染方式。

// Before
import { render } from 'react-dom';
const container = document.getElementById('app');
render(<App tab="home" />, container);// After
import { createRoot } from 'react-dom/client';
const container = document.getElementById('app');
const root = createRoot(container); // createRoot(container!) if you use TypeScript
root.render(<App tab="home" />);

        官方文档说明:How to Upgrade to React 18 – React Blog

3.3 src / App.js

import React from "react";
import Hello from "./Component/Hello/Hello";
import Welcome from "./Component/Welcome/Welcome";class App extends React.Component {render() {return (<div><Hello /><Welcome /></div>)}
}// 暴露 App
export default App

3.4 子组件

// Hello.jsimport React from "react";
// 引入当前路径下的 css 文件
import './Hello.css'export default class Hello extends React.Component {render() {return <h2 className="hello">Hello!我是第一个组件哈!</h2>}
}
/* Hello.css */.hello {background-color: antiquewhite;
}

三、案例:增删改列表

1、实现的效果

2、code

        具体的 code 实现放上来有点多,我放在资源里,可自行下载(这个是自己敲的,有些小细节可能不同),也可以参考学习视频里面老师的做法自己实现。

        react的todoList案例代码-Javascript文档类资源-CSDN下载

3、实现案例后的总结

3.1 动态初始化列表,如何确定将数据放在那个组件的 state 中? 

        (1)某个组件使用:放在其自身的 state 中。

        (2)某些组件使用:放在他们共同的父组件 state 中(官方称为:状态提升)。在这个案例中,整体列表的 state 都放在 APP.js 中。

        (3)状态在哪里,操作状态的方法就在哪里。所以增删改的方法都放在 APP.js 中(addTodos、updateTodos、deleteTodos)。 

3.2 关于父子组件之间的通信

        (1)父组件 ==> 子组件 传递数据:通过 props 传递

<!-- 父组件给子组件传递数据 -->
<List todos={todos} updateTodos={this.updateTodos} deleteTodos={this.deleteTodos} /><!-- 子组件接收数据 -->
const { todos, updateTodos, deleteTodos } = this.props

        (2)子组件 ==> 父组件 传递数据:父组件通过 props 提前给子组件传递一个函数,子组件通过调用这个函数完成数据传递。

<!-- 父组件给子组件传递一个函数 -->
<Footer todos={todos} changeChecked={this.changeChecked} /><!-- 子组件调用这个函数 -->
changeChecked = (event) => {this.props.changeChecked(event.target.checked)
}

3.3 数组方法:Array.prototype.reduce()

        reduce() 方法对数组中的每个元素按序执行一个由您提供的 reducer 函数,每一次运行 reducer 会将先前元素的计算结果作为参数传入,最后将其结果汇总为单个返回值。

// 官方示例
const array1 = [1, 2, 3, 4];// 0 + 1 + 2 + 3 + 4
const initialValue = 0;
const sumWithInitial = array1.reduce((previousValue, currentValue) => previousValue + currentValue,initialValue
);console.log(sumWithInitial);
// expected output: 10
// 案例中计算已完成个数
const finishedTodos = todos.reduce((pre, todo) => pre + (todo.done ? 1 : 0), 0)

官方文档:Array.prototype.reduce() - JavaScript | MDN

3.4  数组方法(遍历):Array.prototype.map()

        map() 方法创建一个新数组,这个新数组由原数组中的每个元素都调用一次提供的函数后的返回值组成。

callback 生成新数组元素的函数,使用三个参数:

        (1)currentValue:callback 数组中正在处理的当前元素。

        (2)index(可选):callback 数组中正在处理的当前元素的索引。

        (3)array(可选):map 方法调用的数组。

// 官方示例
const array1 = [1, 4, 9, 16];// pass a function to map
const map1 = array1.map(x => x * 2);console.log(map1);
// expected output: Array [2, 8, 18, 32]
// 案例中使用
const newTodos = todos.map((todoObj) => {return { ...todoObj, done: done }
})

官方文档:Array.prototype.map() - JavaScript | MDN 

3.5  数组方法(过滤):Array.prototype.filter() 

        filter() 方法创建一个新数组,其包含通过所提供函数实现的测试(满足条件)的所有元素。

// 官方示例
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];const result = words.filter(word => word.length > 6);console.log(result);
// expected output: Array ["exuberant", "destruction", "present"]
// 案例中使用const newTodos = todos.filter((todoObj) => {return !todoObj.done
})

3.6 增删改基本操作

        方法基本步骤是:获取状态、对数据进行增删改操作,更新状态。

	addTodos = (todoObj) => {// 获取原来的 todosconst { todos } = this.state// 创建新的 todo,注意这里是一个数组!const newTodo = [todoObj, ...todos]// 更新状态this.setState({ todos: newTodo })}

http://chatgpt.dhexx.cn/article/TlTJCpVi.shtml

相关文章

react脚手架

1.脚手架简介 xxx脚手架: 用来帮助程序员快速创建一个基于xxx库的模板项目 包含了所有需要的配置&#xff08;语法检查、jsx编译、devServer…&#xff09;下载好了所有相关的依赖可以直接运行一个简单效果react提供了一个用于创建react项目的脚手架库: create-react-app项目的…

React(二)react脚手架的搭建

目录 一、搭建本地开发环境 二、创建 React 脚手架项目 三、VS Code 启动脚手架项目 React脚手架我们所用的其中一个是Create React App&#xff0c;Create React App 是一个用于学习 React 的舒适环境&#xff0c;也是用 React 创建新的单页应用的最佳方式。它会配置你的开…

React--》超详细教程——React脚手架的搭建与使用

目录 React脚手架的创建 全局安装创建 npx安装创建(官方推荐) 指定React版本安装 脚手架文件介绍 React脚手架是开发现代Web应用的必备&#xff0c;其充分利用Webpack、Babel、ESlint等工具辅助项目的开发&#xff0c;当然这些工具也无需手动配置即可使用&#xff0c;脚手…

金额计算!

一、简介 金额计算是一个计算机开发中经常会用到的一个小方法&#xff0c;在我不懂之前&#xff0c;我一度以为需要自己写很多的代码&#xff0c;自己去编写各种数据的相加、相乘&#xff0c;复杂的不得了&#xff0c;可等我接触后才知道&#xff0c;原来这么简单&#xff0c;今…

Excel房贷计算表(商贷)1/2

Excel房贷计算表&#xff08;商贷&#xff09; 1. 计算月供。2. 计算房屋总价和最低首付。3. 计算实际首付。3.1 等额本息和等额本金的特点3.2 等额本息和等额本金月供计算3.3 计算实际首付 4.计算公共费用4.1契税4.2 物业维修基金4.3 其他费用4.4 公共费用计算 5.预算6.总表 1…

数据表格中金额计算

在layui中&#xff0c;有一个数据表格的功能&#xff0c;对于此&#xff0c;我们可以自定义表头&#xff0c;也可以自定义分页。以下是一张数据表格设置图以及效果图&#xff0c;这个分页有需要就可开启。 在上图中&#xff0c;我有需求&#xff0c;我需要获取数据表格中的所有…

#八、古老的查表计算器--图表

图表&#xff0c;一般称作江恩图表。这是由于江恩在股市的使用&#xff0c;使其受到关注。实际其产生年代应在古希腊或古罗马时期&#xff08;笔者根据数学史的逻辑推理&#xff0c;无考古证据&#xff09;&#xff0c;只是这些图表是当年最高的数学水平的产物之一&#xff0c;…

统计计算

这本书讲不完 统计计算和统计仿真。 85道题做一下。 最后的考试可能都来源于这些习题里面。 在学习通里面点名&#xff0c;算平时成绩。 这个课程是面向计算机的 计算机表示数肯定是有误差的。 第一次课看到15分钟 10月25日&#xff0c;一分钟时间签到作为平时成绩&#xff…

表格金额的计算

因为数据库中的金额字段不适合表格中显示出来的金额值 &#xff0c;所以表格中的金额是需要计算的 &#xff0c;通过单价价格和数量计算出中的金额 &#xff0c;下面是表格的图片 因为是在测试所以其中的数据有点儿不太认真 &#xff0c;下面的是表格生成的js代码 ,具体实现的可…

Power BI 学习四:计算列、计算表、度量值

计算表 借助计算表&#xff0c;可以将新表添加到模型中。 但是&#xff0c;你会创建定义表值的数据分析表达式 (DAX) 公式&#xff0c;而非从数据源中查询值&#xff0c;并将值加载到新表的列中。 在 Power BI Desktop 中&#xff0c;计算表是通过使用报表视图或数据视图中的“…

如何计算算计?

再复杂的问题都不在“复”&#xff0c;而在“杂” ​ 计算以知为主&#xff0c;算计则是用良知&#xff08;德&#xff09;或恶知&#xff08;坏&#xff09;。 机器智能是外在驱动的非实时离线计算学习&#xff0c;人类智能是内在驱动的实时在线算计学习。 “算计”是从0到1&a…

3.1 PowerBI系列之DAX函数专题-计算列和度量值及计算表的多种生成方式

1.度量值&#xff08;a&#xff09;和计算列&#xff08;b&#xff09;的区别&#xff1a; &#xff08;1&#xff09;&#xff08;a&#xff09;不被存储,&#xff08;b&#xff09;存储在内存中 &#xff08;2&#xff09;&#xff08;a&#xff09;在使用时才计算&#xff0…

如何计算哈希表查找失败时的平均查找长度

题目描述&#xff1a; 1.请回答采用线性探测再散列和链地址法处理冲突构建的哈希表中&#xff0c;查找失败时的平均查找长度如何计算? 例:已知一组关键字(19,14,23,1,68,20,84,27,55,11,10,79) 哈希函数为: H(key)key MOD 13,哈希表长为m15,设每个记录的查找概率相等&#xff…

tableau-行计算、视图计算、表计算

Tableau的表计算分为几类&#xff0c;重点是前面三类。 索引排序函数&#xff1a;index()、size()、first()、last() ——这四个不需要参数; rank()及延伸函数&#xff0c;如rank_dense(),rank_modified()等&#xff1b;移动计算函数&#xff1a;running_x &#xff0c;比如 r…

从零开始Tableau | 10.表计算-基础

表计算是tableau中的一个重要知识点&#xff0c;也是应用的难点之一&#xff0c;但用好表计算&#xff0c;能较好解决日常分析中的许多计算问题。本节记录要点&#xff1a; 基础概念快速表计算创建表计算 基础概念 1.表计算是针对多行数据进行计算的方式&#xff0c;创建表计算…

tableau 如何选择tableau计算类型?基本计算 / LOD计算 / 表计算

一、计算在数据源和分析中的位置 基本计算和LOD表达式是数据源查询的计算&#xff0c;返回的是一个结果集。统称为custom calculation&#xff0c;生成的结果是custom filed 自定义字段&#xff0c;字段在哪里&#xff1f;字段在数据源层面。 ① 基本计算和LOD计算是在数据源层…

tableau:表计算

先创建一个‘利润2’的计算字段来copy一下‘利润’&#xff1a; 然后按照下图操作&#xff1a; 然后我们对‘利润2’添加表计算&#xff08;比如说我们这里选择‘汇总’&#xff09;&#xff1a; 然后就变成了下面这样&#xff1a; 可以看到红色圈圈那里多了一个小三角形&a…

Tableau 表计算函数

关注微信公共号&#xff1a;小程在线 关注CSDN博客&#xff1a;程志伟的博客 使用表计算函数可自定义表计算。 表计算应用于整个表中值的计算&#xff0c; 通常依赖于表结构本身。 1.FIRST() 返回从当前行到分区中第一行的行数。 例如&#xff0c; 计算每季度销售额。在Date…

Tableau(9):计算字段、表计算、自定义表计算

文章目录 一、计算字段二、表计算三、自定义表计算参考资料 一、计算字段 步骤1&#xff1a;导入全球超市订单数据   步骤2&#xff1a;创建成本&#xff08;销售额-利润&#xff09;字段 步骤3&#xff1a;创建盈利标志&#xff08;若利润大于0盈利&#xff0c;反之就是…