React-项目构建

news2024/11/16 19:40:10

​🌈个人主页:前端青山
🔥系列专栏:React篇
🔖人终将被年少不可得之物困其一生

依旧青山,本期给大家带来React篇专栏内容:React-项目构建

目录

1、初始化项目

2、目录结构

组件

1、组件的创建方式

1.1、函数创建组件

1.2、类组件

2、组件传值(父-子)

2.1、函数组件

2.2、类组件

React团队推荐使用create-react-app(相当于vue的vue-cli)来创建React新的单页应用项目,它提供了一个零配置的现代构建设置。

React脚手架(create-react-app)意义:

  • 脚手架是官方提供,零配置,无需手动配置繁琐的工具即可使用

  • 充分利用Webpack,Babel,ESLint等工具辅助项目开发

  • 关注业务,而不是工具配置

create-react-app会配置我们的开发环境,以便使我们能够使用最新的 JavaScript特性,提供良好的开发体验,并为生产环境优化你的应用程序。为了能够顺利的使用create-react-app脚手架,我们需要在我们的机器上安装Node >= 14 和 npm >= 8。

npm i -g @vue/cli

vue create xxxx

1、初始化项目

在终端中使用以下命令来构建react项目:

# 免安装形式
npx create-react-app my-app
# 上面这种安装方式不需要全局安装create-react-app,如果需要全局安装,则可以执行下面的命令
# 项目名称:react、reactdom、reactscript等不允许使用
# npm i -g create-react-app
# create-react-app your-app

项目创建需要消耗的时间可能会有点久,在项目创建完毕后可以执行以下指令:

# 进入项目目录
cd my-app
# 启动项目
npm start

如果本机安装了yarn(一款Facebook自家的包管理工具,类似npm),则安装好给予的项目启动命令提示是yarn start

# yarn安装

npm i -g yarn
​
# 配置yarn源

npm i -g yrm
​
# yrm切换yarn源

yrm use taobao
​
# 生成react项目包
yarn create react-app 包名称

2、目录结构

  • public目录下

    • manifest.json:清单文件(说明性文件),谷歌要求有这个文件,但是这个文件对开发者来讲没什么用。

    • robots.txt:用于声明当前项目哪些路径、目录允许搜索引擎抓取。

  • src目录下

    • *.css:样式文件

    • ==App.js==:类似于App.vue,就是react里面的根组件(在react中,组件后缀是js,但是以后写react组件的时候后缀请使用jsx,为了便于区分组件与封装的js文件

    • App.test.js:测试文件

    • ==index.js==:类似于main.js,是项目执行的入口文件

    • reportWebVitals.js:谷歌新增的性能优化库文件

    • setupTests.js:针对项目index.js的一个单元测试文件

了解了react的目录结构后,可以对初始化的项目进行文件清理。此处将srcpublic目录中的内容全部删除即可,后期如果需要自己往里面写内容。

组件

组件

组件允许我们将UI拆分为独立可复用的代码片段,并对每个片段进行独立构思。从概念上类似于JavaScript函数,它接受任意的入参(props),并返回用于描述页面展示内容的React元素(JSX)。

在react中,组件的形式有2种:

  • 函数组件(拥抱函数式开发方式,面向过程)

    • 无状态(函数组件也被称之为无状态组件,相当于vue中的data)

    • 无生命周期

    • 有Hooks(辅助函数的集合,这些辅助函数可以帮助开发者在函数组件下快速开发)

  • 类组件(面向对象)

    • 有状态

    • 有生命周期

1、组件的创建方式

在react17之后,允许在项目不用“import React from "react";”,但是在之前的版本是不行的。建议写,肯定不会错。

1.1、函数创建组件

通过函数创建的组件有以下特点:

  • 函数组件(无状态组件):使用JS的函数创建组件

  • 函数名称以大写字母开头(建议)

  • 函数组件必须有返回值,表示该组件的结构(虚拟DOM),且内容必须有顶级元素

  • 函数组件是没有生命周期的

例如,新建组件文件src/App.jsx

约定:组件后缀可以是.js也可以是.jsx,为了方便区分组件与项目的业务代码,建议组件用.jsx,业务代码后缀用.js

import React from 'react'
// 函数名首字母必须大写
function App() {
    return (
        <div>这是第一个函数组件</div>
    )
}
​
export default App;

要想输出效果,可以再创建项目入口文件src/index.js

import React from "react";
import ReactDOM from "react-dom";
​
import App from "./App";
​
ReactDOM.render(<App></App>, document.getElementById("root"));

注意,由于之前清理了项目,当前项目中现在是没有挂载点的,所以需要在public/下创建一个html文件index.html,在其body中设置一个挂载位置:

<div id="root">
​
</div>

1.2、类组件

类组件有以下特点:

  • 使用ES6语法的class创建的组件(有状态组件)

  • 类名称为大写字母开头(建议)

  • 类组件要继承React.Component父类,从而可以使用父类中提供的方法或者属性

  • 类组件必须提供render方法,用于页面结构渲染,结构必须要有顶级元素,且必须return去返回

import React from "react";
// 创建class类,继承React.Component,在里面提供render方法,在return里面返回内容
class App extends React.Component {
    render() {
        return <div>这是第一个类组件</div>;
    }
}
​
export default App;

除了上述的写法以外,还可以对React.Component进行按需导入,写成以下形式:

// 引入react和Component
import React,{Component} from "react";
​
// 类组件
class App extends Component {
    render() {
        return <div>这是第一个类组件</div>;
    }
}
​
// 导出
export default App;

2、组件传值(父-子)

组件间传值,在React中是通过只读属性props来完成数据传递的。

props:接受任意的入参,并返回用于描述页面展示内容的React元素。

2.1、函数组件

函数组件传值使用props:以形参的形式给函数传递props参数。(与vue的思想是一样的)

例如,有子组件src/Components/Item.jsx,代码如下:

import React from "react";
​
const Item = (props) => {
    return (
        <div>
            海纳百川有容乃大,{props.next}。 -- {props.name}
        </div>
    );
};
​
export default Item;

要想在父组件中给其传递namenext值,则父组件src/App.jsx可以写成:

import React from "react";
​
import Item from "./Components/Item";
​
class App extends React.Component {
    render() {
        return <Item name="林则徐" next="壁立千仞无欲则刚"></Item>;
    }
}
​
export default App;

React的父传子的方式与Vue类似,都是通过调用子组件给子组件传递自定义属性方式进行传值的。

2.2、类组件

在父组件中通过自定义属性向子组件传值后,如何在子级类组件中获取传递过来的值呢?

我们可以在子级类组件中通过this.props属性来获取传递到子组件的值,如下:

import React, { Component } from "react";
​
class Item extends Component {
    render() {
        return (
            <div>
                 海纳百川有容乃大,{this.props.next}。 -- {this.props.name}
            </div>
        );
    }
}
​
export default Item;

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

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

相关文章

【报错解决】RuntimeError: Distributed package doesn‘t have NCCL built in

报错信息&#xff1a; raise RuntimeError("Distributed package doesnt have NCCL " "built in") RuntimeError: Distributed package doesnt have NCCL built in报错原因&#xff1a; windows系统不支持nccl&#xff0c;采用gloo&#xff1b; 报错解决&…

浅谈程序员如何搞副业?

当程序员想要开展副业时&#xff0c;可以考虑以下具体的方法和策略&#xff1a; 确定自己的技术专长&#xff1a;了解自己在哪些技术领域有深入的专业知识和经验&#xff0c;根据这些领域找到适合的副业方向。 建立个人品牌和网络影响力&#xff1a;通过撰写博客、发表技术文章…

手拉手安装启动Kafka2.13

启动Kafka本地环境需Java 8以上 Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff0c;它可以处理消费者在网站中的所有动作流数据。 这种动作&#xff08;网页浏览&#xff0c;搜索和其他用户的行动&#xff09;是在现代网络上的许多社会功能的一个关键因素。 Kafka启动…

云原生:企业数字化转型的引擎与未来

一&#xff0c;引言 随着信息技术的飞速发展&#xff0c;企业数字化转型已成为时代的必然趋势。在这场深刻的变革中&#xff0c;云原生技术以其独特的优势&#xff0c;逐渐成为推动企业数字化转型的核心动力。本文将详细探讨云原生技术的内涵、发展历程&#xff0c;以及在企业数…

Flink入门学习 | 大数据技术

⭐简单说两句⭐ ✨ 正在努力的小新~ &#x1f496; 超级爱分享&#xff0c;分享各种有趣干货&#xff01; &#x1f469;‍&#x1f4bb; 提供&#xff1a;模拟面试 | 简历诊断 | 独家简历模板 &#x1f308; 感谢关注&#xff0c;关注了你就是我的超级粉丝啦&#xff01; &…

前端三剑客 —— JavaScript (第十一节)

内容回顾&#xff1a; jQuery 操作DOM jQuery 事件处理 Ajax jQuery 特效案例 全选效果 tab切换 下拉菜单 自定义动画 Bootstrap 入门 首先我们可以在bootstrap官网上进行下载。官网地址:https//www.bootcss.com/ 首先在我们的页面中导入bootstrap的样式&#xff0c;我们可…

自己操作逆向案例一——某竞赛网登录密码加密,超级简单,泪目了!

网址&#xff1a;aHR0cHM6Ly9leGFtem9uZS5zYWlrci5jb20vcXVlc3Rpb24vZXhwbG9yZQ 打开开发者工具&#xff0c;点击账号密码登录&#xff0c;进行抓包 先进行搜索&#xff0c;发现一下子就找到了&#xff0c;且看上去很像MD5加密&#xff0c;打上断点&#xff0c;再次点击登录。…

计算机网络 Cisco路由信息协议(RIP)实验

一、实验内容 1、命名 2、关闭域名解释 3、设置路由器接口IP地址 4、根据要求配置RIP以实现所有客户机都能相互通信 5、配置默认路由 二、实验数据处理 1、建立拓扑图 2、PC机地址配置 主机IP地址子网掩码网关PC110.23.1.2255.255.255.010.23.1.1PC210.23.1.3255.255.2…

数据结构—顺序表实现通讯录

在上一节我们基本了解了顺序表的基本知识&#xff0c;接下来我们就用顺序表来实现一下通讯录。 一、基于动态顺序表实现通讯录 1.1 功能介绍 1. 能够保存用户信息&#xff1a;姓名&#xff0c;性别&#xff0c;年龄&#xff0c;电话&#xff0c;地址等 2. 添加联系人信息 3. …

锂电池寿命预测 | Matlab基于BiLSTM双向长短期记忆神经网络的锂电池寿命预测

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 锂电池寿命预测 | Matlab基于BiLSTM双向长短期记忆神经网络的锂电池寿命预测 程序设计 完整程序和数据获取方式&#xff1a;私信博主回复Matlab基于BiLSTM双向长短期记忆神经网络的锂电池寿命预测。 参考资料 [1] h…

如何为不同内容主题选择最适合的移动滑轨屏方案?

在数字化信息时代背景下&#xff0c;多媒体互动装置作为当前内容展示的常用手段&#xff0c;颇受大众的喜爱&#xff0c;比如应用在展厅、商业推广、活动会议等领域的滑轨屏&#xff0c;便是其中一种新颖的互动展示装置&#xff0c;并且它还能根据不同的内容主题&#xff0c;来…

企业级OVSSL证书的五大优势

在数字化时代&#xff0c;企业级OVSSL&#xff08;Organization Validation Secure Sockets Layer&#xff09;证书已成为保护网站安全、提升用户信任度的重要工具。越来越多企业在自身网络安全方面更倾向于OVSSL证书&#xff0c;以下就带你了解企业级OVSSL证书的五大优势&…

硬件测试学习——电源纹波测试(2024.04.15)

参考链接1: 测试开关电源的纹波 在此感谢各位前辈大佬的总结&#xff0c;写这个只是为了记录学习大佬资料的过程&#xff0c;内容基本都是搬运的大佬博客&#xff0c;觉着有用自己搞过来自己记一下&#xff0c;如果有大佬觉着我搬过来不好&#xff0c;联系我删。 硬件测试学习—…

Flask框架——安装与第一个应用

安装 Flask是一个轻量级的Python Web框架。它是一个微型框架&#xff0c;具有灵活性和可扩展性。Flask使用Python语言编写&#xff0c;它是一个开源框架&#xff0c;使得它可以自由地使用和修改。Flask框架可以用于构建任何类型的Web应用程序&#xff0c;包括单页面应用程序、…

【vue】用vite创建vue项目

前置要求 要有Node.js 1. 用vite创建vue项目 在cmd中&#xff0c;进入一个文件夹 在文件资源管理器上面的文件目录中&#xff0c;输入cmd&#xff0c;回车在cmd中通过cd命令进入对应文件夹 创建项目 npm create vitelatest # 创建项目创建项目过程中的一些选项 Ok to pro…

【Qt编译】ARM环境 Qt5.14.2-QtWebEngine库编译 (完整版)

ARM 编译Qt5.14.2源码 1.下载源码 下载Qt5.14.2源代码&#xff08;可根据自己的需求下载不同版本&#xff09; 下载网站&#xff1a;https://download.qt.io/new_archive/qt/5.14/5.14.2/single/ 2.相关依赖(如果需要的话) 先参考官方文档的需求进行安装&#xff1a; 官方…

突破界限 千视将在 NAB 2024 展会上展示领先的 AV over IP 技术

突破界限&#xff01;千视将在 NAB 2024 展会上展示领先的 AV over IP技术 作为AV over IP领域的先驱者&#xff0c;Kiloview将于2024年4月14日至17日在NAB展会&#xff08;展台号&#xff1a;SU6029&#xff09;隆重登场&#xff0c;展示我们领先业界的AV over IP产品、解决方…

构建跨设备3D应用:HOOPS的跨平台开发能力

在当今数字化和可视化需求不断提升的时代&#xff0c;三维技术的应用越来越广泛&#xff0c;尤其在制造、建筑、工程及媒体行业。HOOPS&#xff0c;由Tech Soft 3D开发&#xff0c;是一套全面的软件开发工具包&#xff0c;用于构建高性能的三维应用程序。该工具包涵盖了从三维渲…

企业中台技术架构解决方案(中台建设指南Word原件2024)

通过中台建设实现企业能力复用&#xff0c;包括能力整合、业务创新、业务和数据闭环、组织模式演进等。 数字能力整合 企业的数字能力一般包括数字化营销、数字化产品、数字化供应链、数字化生产、数字化运营等。企业的数字化能力的充分利用&#xff0c;从而达到可持续发展。数…

UE5 C++ TimeHandle 定时器练习

一.加相关头文件 #include "TimerManager.h" 二.声明定时器 变量 //声明定时器 FTimerHandle Time; 三.在BeginPaly里面 设参数 GetWorld()->GetTimerManager().SetTimer(Time,this,&AMyCharacter::Printf,1.0,true); //时间句柄 Time 每一秒 调用Pri…