带你入门React

目录

  • 前言
  • 一,基本配置
  • 1.1 环境搭建
  • 1.2 页面初始化渲染
  • 二,基础学习
    • 2.1 结构与样式开发
    • 2.2 数据展示
    • 2.3 行内样式
    • 2.4 条件渲染
    • 2.5 列表渲染
    • 2.6 点击事件
  • 三,页面更新
    • 3.1 组件数据
    • 3.2 组件数据共享
  • 总结

前言

笔者之前的工作经验都局限于Vue,今天稍稍体验React,记录相关历程。

一,基本配置

1.1 环境搭建

项目比较好跑。配置好Node环境和淘宝镜像。

在全局下载webpack和react环境,终端中去进行配置。

npm i -g webpack
npm i -g create-react-app
create-react-app my-project

如果在create的过程中报错,可能是权限问题。cmd管理员权限再次创建即可。

观察package.json文件,react的启用指令为:
在这里插入图片描述

npm run start

项目跑起,轻轻松松:
在这里插入图片描述
如果要做ts方向,在下载时候:

create-react-app my-project --template typescript

其他流程一样。

具体参考的文档为,react中文网。
react中文网

1.2 页面初始化渲染

整个React项目的渲染,是在src中的index文件中

这里我用的是ts,所以index文件名为Index.tsx

我们可以通过修改render中渲染的组件来确定页面默认渲染的是什么:

在这里插入图片描述
这一点跟Vue中的render比较像。

二,基础学习

2.1 结构与样式开发

看了文档,发现react是函数开发。

之前做Vue,Vue的模板、样式、行为都是区分开写的。但是在react中,所有的东西都是js。

所有组件开头必须大写(命名规范),以及仔细观察这个return,Vue中的return出来的都是花括号,对react来说,是小括号;

react所有的标签都必须是闭合状态;

import './App.css';// 声明按钮组件
function MyButton() {return (<button>引入一个基本的按钮组件</button>)
}function App() {return (<div className="App">{/* 嵌套组件 */}<MyButton></MyButton></div>);
}export default App;

2.2 数据展示

上一节的代码中,有没有观察到,注释由花括号包裹。

官网有写,虽然结构也放在js代码中,但是正儿八经的js代码,其实是放在大括号中的。这样就可以从代码中嵌入一些变量并展示给用户。

在数据展示这一块,Vue中的模板语法用到最多的是双花括号{{}},但是react,数据展示按照js来定,因此看到的数据其实都是放在一个花括号中。

// 变量声明
let state : {name: String,date: String
} = {name: "zxd", date: "111"}// 声明按钮组件
function MyButton() {return (<button className="btn">引入一个基本的按钮组件222</button>)
}function App() {return (<div className="App">{/* 嵌套组件 */}<MyButton></MyButton><p>{ state.date }</p></div>);
}

效果展示:
在这里插入图片描述

2.3 行内样式

行内样式的写法有些不一样:

function App() {return (<div className="App">{/* 嵌套组件 */}<MyButton></MyButton><p style={{ color: "red" }}>{ state.date }</p></div>);
}

行内样式的写法并不特殊,是因为,style里面本来就是js的对象,所以第一个括号代表里面是js代码,第二个括号是js中的对象。

上文其实说过,在react中什么都可以用js写,在这里就表现出来了。

2.4 条件渲染

Vue的条件渲染有特殊写法,v-if和v-show。React中没有特殊语法来写条件语句

// 对name进行条件判断
if(state.name == "zxd") {state.date = "666nb"
} else {state.date = "1112"
}

2.5 列表渲染

列表渲染,一次性渲染很多条数据。类似于Vue的v-for。

// 定义产品变量 对象类型的数组
const products: Array<{ title: String, id: Number }>= [{ title: "产品1", id: 1 }, { title: "产品2", id: 2 }, { title: "产品3", id: 3 }]let key: Number// h5页面上的子节点渲染
const listItems = products.map(item =><li {...key = item.id}>{item.title}</li>
)// 声明按钮组件
function MyButton() {return (<><div><ul>{listItems}</ul></div></>)
}

原理类似于Vue,只不过要注意,key是js代码,花括号包裹。这个key属性,是该li的唯一标识,后续插入、删除、重排,都需要依靠提供的key来控制。

2.6 点击事件

// 声明按钮组件
function MyButton() {function clickDiv() {console.log("click了一下")}return (<>{/* 点击事件 */}<div onClick = {clickDiv}>click it</div><div><ul onClick={clickDiv}>{listItems}</ul></div></>)
}

这里要注意的是,组件的点击事件,在组件内部的函数中去写。

三,页面更新

3.1 组件数据

组件会有一些独有的数据,比如一个按钮被点击的次数。如果想把这些信息展示出来,则需要从React中引入useState

// 更新页面需要用到的                       
import { useState } from 'react';
// 声明按钮组件
function MyButton() {// 可以在每个组件中都声明state变量 // 为什么是count和setCount,count是当前的state,更新它的函数是setCount,也可以起任何名字// 一般起名字都是A,setA为它们命名const [ count, setCount ] = useState(0)const [ count1, setCount1 ] = useState(2)function clickDiv() {console.log("click了一下")setCount(count + 1)}function clickDiv2() {console.log("另一个组件")setCount1(count1 + 1)}return (<>{/* 点击事件 */}<button onClick = {clickDiv}>{ count }</button><button onClick = {clickDiv2}>{ count1 }</button></>)
}

useState是一个组合,左边的数组里面是初始值和控制初始值的函数。右边的括号是初始值。 在组件中的一次定义就是定义了一个值。

上述代码中的两个值互不影响,没有关系。

在这里插入图片描述
哪怕多次渲染同一个组件,每个组件都会有自己的state,互不影响。

3.2 组件数据共享

组件数据共享,类似于Vue中的props

请看代码:

import { useState, FC } from 'react'const MyApp: FC = () => {const [count, setCount] = useState<number>(0)function handleClick() {setCount(count + 1)}return(<div><MyButton count={count} onClick={handleClick}></MyButton></div>)
}const MyButton: FC<{count:number, onClick:() => void}> = ({count, onClick}) => {return(<><button onClick={onClick}>组件之间数据的共享按钮{count}</button></>)
}export default MyApp

代码中多用箭头函数

先定义一个MyApp,MyApp内部会提前定义useState,然后传值的时候类似于Vue的prop,这也是react中的prop。

如果是结合ts去写,在定义按钮组件的时候,需要把count和onClick一起传过去。

总结

本篇文章是基于官网入门的react,希望能对读者朋友们有帮助吧。加油,以后我还是要回归Vue的。体验下也好~

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

01-单片机商业项目编程,从零搭建低功耗系统设计

一、引言 这是关于《单片机商业编程之从零搭建低功耗系统》的第一篇章&#xff0c;个人善忘&#xff0c;平常项目设计当中的一些思路&#xff0c;以前年轻的时候习惯性的录制成视频&#xff0c;也算是当作是自己的笔记&#xff0c;无奈现在喉咙实在扛不住&#xff0c;因此先尝试…

适用于 macOS 的最佳独立 HBO Max 客户端

适用于 macOS 的最佳独立 HBO Max 应用程序。不再在浏览器选项卡之间切换。只需直接从 Dock 启动 Clicker for HBO Max 即可开始狂欢。 HBO Max 客户端 Clicker for HBO Max 下载 Clicker for HBO Max mac版安装教程 软件下载完成后&#xff0c;双击pkg根据提示进行安装 Clic…

2024最新同城吃喝玩乐小程序源码+同城分类信息小程序搭建+开源无需授权+详细图文安装部署教程

在繁忙的都市生活中&#xff0c;生活节奏飞快&#xff0c;人们希望能够快速、便捷地获取各类生活信息&#xff0c;满足日常的吃喝玩乐需求。同城吃喝玩乐同城分类信息小程序&#xff0c;非常受欢迎&#xff0c;提供一站式便捷生活新体验。 分享一款2024最新同城吃喝玩乐小程序…

QT作业3

1、思维导图 2、聊天界面 //头文件1 #ifndef MYWIDGET_H #define MYWIDGET_H#include <QWidget> #include<QIcon> //图标类 #include<QLabel> //标签类 #include<QMovie> //动图类 #include<QLineEdit> //行编辑器类 #include<QPushButton&g…

《Fundamentals of Power Electronics》——示例:Buck-Boost转换器模型变为正则形式

为了说明正则电路模型推导的步骤&#xff0c;让我们将buck-boost转换器的等效电路操作成规范形式。buck-boost转换器的一个小信号交流等效电路如下图所示。 为了将上图所示网络转换成正则形式&#xff0c;需要将所有独立源d(t)转换到左侧&#xff0c;而将所有电感转换到右侧与变…

Linux——基础IO2

引入 之前在Linux——基础IO(1)中我们讲的都是(进程打开的文件)被打开的文件 那些未被打开的文件呢&#xff1f; 大部分的文件都是没有被打开的文件&#xff0c;这些文件在哪保存&#xff1f;磁盘(SSD) OS要不要管理磁盘上的文件&#xff1f;(如何让OS快速定位一个文件) 要…

华为数据之道第二部分导读

目录 导读 第二部分 第4章 面向“业务交易”的信息架构建设 信息架构的四个组件 数据资产目录 数据标准 数据模型 数据分布 信息架构原则&#xff1a;建立企业层面的共同行为准则 信息架构建设核心要素&#xff1a;基于业务对象进行设计和落地 按业务对象进行架构设…

CSS3新增特性

新增属性选择器 <style>/* 必须是input但是同时具有value这个属性选择这个元素 [] */input[value] {color: red;}input[typetel] {color: blue;}/* 选择首先是div然后具有cLass属性并且属性值必须是 icon开头的这些元素 ^ */div[class^icon] {color: pink;}section[c…

113721-87-2,7-AMCANHS活化酯可用于蛋白质印迹和免疫测定

一、产品概述 7-AMCA NHS ester是一种重要的荧光标记试剂&#xff0c;广泛应用于生物分子研究、细胞成像以及蛋白质标记等领域。 结构式如图所示 中文名称&#xff1a;7-AMCA NHS 活化酯 英文名称&#xff1a;7-AMCA NHS ester&#xff0c;AMCA-OSu CAS号&#xff1a;11372…

芸众商城电商专业版400+插件源码+搭建教程

介绍&#xff1a; 芸众商城社交电商系统SAAS平台前端基于vue开发&#xff0c;后端基于研发积分商城系统源码 php&#xff0c;本文安装芸众商城全插件&#xff08;400多个&#xff09;商业版平台源码&#xff0c;可同时支持多端口部署运行&#xff1b;使用宝塔面板一键部署的形…

汽车软件研发工具链丨怿星科技新产品重磅发布

“创新引领未来”聚焦汽车软件新基建&#xff0c;4月27日下午&#xff0c;怿星科技2024新产品发布会在北京圆满举行&#xff01;智能汽车领域的企业代表、知名大企业负责人、投资机构代表、研究机构代表齐聚现场&#xff0c;线上直播同步开启&#xff0c;共同见证怿星科技从单点…

MySql表的增删查改(CRUD)

对表中的数据操作分为4大类&#xff0c;增加数据&#xff0c;删除数据&#xff0c;查找数据&#xff0c;修改数据。对表中的数据进行增删查改操作简称为CRUD。Create(增),Retrieve(查找),Updata(修改&#xff09;,Delete(删除)CRUD的操作是对表中的数据进行操作的&#xff0c;是…

MinimogWP WordPress 主题下载——优雅至上,功能无限

无论你是个人博客写手、创意工作者还是企业站点的管理员&#xff0c;MinimogWP 都将成为你在 WordPress 平台上的理想之选。以其优雅、灵活和功能丰富而闻名&#xff0c;MinimogWP 不仅提供了令人惊叹的外观&#xff0c;还为你的网站带来了无限的创作和定制可能性。 无与伦比的…

分类任务的基础学习

1.什么是分类&#xff1f; 2.局限性&#xff1a; 当样本量逐渐变大的时候&#xff0c;准确率会下降——>因为线性回归曲线距离我们的原点越远&#xff0c;预测就会开始不准确&#xff0c;因为 x前面的倍数就会越来越小&#xff0c;这就导致了样本量变大&#xff0c;但是那些…

Activiti7 开发快速入门【2024版】

记录开发最核心的部分&#xff0c;理论结合业务实操减少废话&#xff0c;从未接触工作流快速带入开发。假设你是后端的同学学过JAVA和流程图&#xff0c;则可以继续向后看&#xff0c;否则先把基础课程书准备好先翻翻。 为什么要工作流 比起直接使用状态字段&#xff0c;工作…

vue 语法2

【5】条件渲染和列表渲染 &#xff08;1&#xff09;条件渲染v-if v-else-if v-else 条件渲染根据表达式的真假值来渲染不同的元素或组件。 v-if&#xff1a;当表达式的值为真时&#xff0c;渲染该元素或组件。 v-else-if&#xff1a;当前面的 v-if 或 v-else-if 的表达式为假…

基于springboot实现公交线路查询系统项目【项目源码+论文说明】计算机毕业设计

基于SpringBoot实现公交线路查询系统演示 摘要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完善的了&#xff0c;但是随着移动互联网的到来&#xff0c;处理信息不再受制于地理位置的限制&#xff0c;处理信息及时高效&#xff0c;备受人们的喜爱。本…

JavaScript数字分隔符

● 如果现在我们用一个很大的数字&#xff0c;例如2300000000&#xff0c;这样真的不便于我们进行阅读&#xff0c;我们希望用千位分隔符来隔开它&#xff0c;例如230,000,000; ● 下面我们使用_当作分隔符来尝试一下 const diameter 287_266_000_000; console.log(diameter)…

网络层协议之 IP 协议

IP 协议格式 4 位版本&#xff1a;此处的取值只有两个&#xff0c;4&#xff08;IPv4&#xff09;和 6&#xff08;IPv6&#xff09;&#xff0c;即指定 IP 协议的版本。 4 位首部长度&#xff1a;描述了 IP 报头多长&#xff0c;IP 报头是变长的&#xff0c;因为报头中的选项部…

“人工智能+”推进新质生产力发展论坛暨工作室实践实训基地授牌仪式圆满结束

4月27日&#xff0c;由江西财经大学现代经济管理学院主办的“人工智能”推进新质生产力发展论坛暨“江财现经管泰迪数智技术”校企工作室实践实训基地授牌仪式在江西财经大学现代经济管理学院共青城校区举行&#xff0c;学院院长王金海&#xff0c;副院长丁美东&#xff0c;副院…