带你入门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.mzph.cn/bicheng/9031.shtml

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

相关文章

ICode国际青少年编程竞赛- Python-2级训练场-for循环中的变量

ICode国际青少年编程竞赛- Python-2级训练场-for循环中的变量 1、 for i in range(4):Dev.turnLeft()# 将i1作为Dev移动的步数Dev.step(i 1)2、 for i in range(4):Spaceship.step(i 1)Dev.step(3)Dev.step(-3)3、 for i in range(5):Dev.step(5 - i)Dev.turnRight()4、 …

开源文档管理系统Paperless-ngx如何在Linux系统运行并发布至公网

文章目录 1. 部署Paperless-ngx2. 本地访问Paperless-ngx3. Linux安装Cpolar4. 配置公网地址5. 远程访问6. 固定Cpolar公网地址7. 固定地址访问 Paperless-ngx是一个开源的文档管理系统&#xff0c;可以将物理文档转换成可搜索的在线档案&#xff0c;从而减少纸张的使用。它内置…

【Pytorch】1.读取训练数据集

导入Dataset类 from torch.utils.data import Dataset # 注意是Dataset&#xff08;大写&#xff09;的才是类通过jupyter我们可以阅读一下Dataset类的具体使用方法 help(Dataset) # 或者直接 Dataset??我们可以看到具体对Dataset类的解释 从蓝色字体我们可以得出 所有的代…

释放创造力,低成本实现您的梦想应用 —— 尽在我们的开源低代码平台!

在数字化时代&#xff0c;每个企业都渴望拥有自己的专属应用&#xff0c;但传统开发模式的高成本和技术壁垒让许多梦想搁浅。现在&#xff0c;我们为您带来了革命性的解决方案 —— 一个开源、免费、且功能强大的低代码开发平台&#xff01; 为什么选择我们的低代码平台&#…

QGraphicsView实现简易地图12『平移与偏移』

前文链接&#xff1a;QGraphicsView实现简易地图11『指定层级-定位坐标』 提供地图平移与偏移功能。地图平移是指将地图的中心点更改为给定的点&#xff0c;即移动地图到指定位置。地图偏移是指将当前视口内的地图向上/下/左/右/进行微调&#xff0c;这里偏移视口宽/高的四分之…

【ArcGIS 脚本工具】格式化简单渲染图层或图层组

CAD加GIS是规划人的黄金搭档&#xff0c;不可偏废。 小编通常直接在ArcPro中加载CAD查看&#xff0c;这样可以保证CAD修改之后GIS能同步更新显示。 但是CAD在ArcPro中的显示多少有点水土不服。 比如湘源地块在ArcPro3.0中显示时会自动加上透明度&#xff0c;虽然这样可以看到…

汇集全球顶级AI的自助平台

1、介绍:此平台以其开放和便捷的特性,为用户提供了一个无需月费的 AI 服务入口。咱可以根据自己的需求,灵活选择和付费使用平台上的 AI 技术。 该平台强调的核心优势在于 “零门槛” 和 “按需付费”,意味着用户不需要进行大额预付或者承担长期的固定费用,而是可以根据实际…

利用爬虫解决数据采集难题

文章目录 安装为什么选择 BeautifulSoup 和 requests&#xff1f;安装 BeautifulSoup 和 requests解决安装问题 示例总结 在现代信息时代&#xff0c;数据是企业决策和发展的关键。然而&#xff0c;许多有用的数据分散在网络上&#xff0c;且以各种格式和结构存在&#xff0c;因…

Could not find the Qt platform plugin “dxcb“ in ““、 重点:是dxcb

这个重点就在于是dxcb不是xcb&#xff0c;让我一顿好找。 https://bugs.launchpad.net/ubuntu/source/deepin-qt5dxcb-plugin/bug/1826629 这篇文章描述了应该是deepin系统的一个问题&#xff0c;应该已经修复了不知道为什么我还会遇到。 不过知道是dxcb后直接去qtcreater里的系…

ROS 2边学边练(45)-- 构建一个能动的机器人模型

前言 在上篇中我们搭建了一个机器人模型(其由各个关节&#xff08;joint&#xff09;和连杆&#xff08;link&#xff09;组成)&#xff0c;此篇我们会通过设置关节类型来实现机器人的活动。 在ROS中&#xff0c;关节一般有无限旋转&#xff08;continuous&#xff09;,有限旋转…

Android 注解

自定义注解 注解原理 注解本质是一个接口&#xff0c;Java中所有注解都是继承了Annotation接口的 注解(…)&#xff1a;其实就是一个实现类对象&#xff0c;实现了该注解以及Annotation接口。

TB交易开拓者旗舰版自动交易的设置

本文针对TB交易开拓者旗舰版V6.0.7.0(期货程序化交易软件下载 - 交易开拓者),目前网上没有自动交易设置的完整教程&#xff0c;特写此篇。 1. 设置期货账户的自动登录和登出。点击菜单“文件/系统设置”&#xff0c;然后在“安全”tab做如下设置&#xff1a; 2 设置你的期货账…

C++向函数传递对象

C语言中&#xff0c;对象作为函数的参数和返回值的传递方式有 3 种&#xff1a;值传递、指针传递和引用传递。 1. 对象作为函数参数 把实参对象的值复制给形参对象&#xff0c;这种传递是单向的&#xff0c;只从实参到形参。因此&#xff0c;函数对形参值做的改变不会影响到实…

Sybase数据库分页查询(指定起始位置)

针对单表数据量过大的场景&#xff0c;分页查询必不可少。针对sybase数据库分页查询的案例全网稀少&#xff0c;特别是指定起始页的分页查询实现。 本文依靠实际开发场景&#xff0c;特此总结Sybase数据库分页查询&#xff08;指定起始位置&#xff09;。 目录 一、 SQL实现分…

视频号小店不直播怎么出单?这里面的秘密,一篇文章全曝光!

大家好&#xff0c;我是电商糖果 这两年关于视频号搞电商的话题度非常高&#xff0c;也吸引了很多商家入驻。 视频号因为背后巨大的私域流量池扶持&#xff0c;所以它的转化率非常高。 根据官方发出来的战报&#xff0c;我们也可以看出它的数据是翻倍增长。 在2024微信公开…

5.06号模拟前端面试8问

5.06号模拟前端面试8问 1.promise如何实现then处理 在JavaScript中&#xff0c;Promise 是一个代表异步操作最终完成或失败的对象。它有三种状态&#xff1a;pending&#xff08;等待&#xff09;&#xff0c;fulfilled&#xff08;完成&#xff09;&#xff0c;rejected&…

【漏洞复现】GB28181摄像头管理平台api接口处存在未授权漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

faad2交叉编译——aac解码为pcm,解决faad单通道转双通道问题

FAAD是比较成熟高效的开源AAC解码库&#xff0c;这里用于解码AAC生成PCM数据&#xff0c;用于音频播放。这里因为faad库&#xff0c;会将单通道转化为双通道踩了些坑&#xff0c;所以记录一下。 我使用的是2.11.0版本&#xff0c;貌似往前的版本没有使用CMake&#xff0c;需要c…

《Fundamentals of Power Electronics》——一些常用变换器的正则电路参数值

对于理想的CCM PWM dc-dc转换器&#xff0c;其包含一个电感和电容&#xff0c;正则模型有效的低通滤波器需要包含一个电感和一个电容。正则模型简化为如下图所示。 假设电容与负载直接相连。基础的buck、boost和buck-boost转换器的参数值如下表所示。 该模型可以用传统的线性电…

使用网站内容进行多渠道品牌营销的主要优势

在选择服务提供商时&#xff0c;人们使用不同的方式来查找信息并与他们联系。有些人更喜欢网站&#xff0c;有些人则使用社交媒体或电子邮件。网站对于数字存在仍然至关重要&#xff0c;但跨多个渠道管理内容现在至关重要。多渠道营销以客户喜欢的方式与客户建立联系&#xff0…