带你入门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的。体验下也好~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pandas快速使用

DataFrame介绍 Dateframe结构和列表类似&#xff0c;区别是对于DataFrame的每一列和每一行均有一个标签。例如以下数据&#xff0c; 上述数据中&#xff0c;日期作为每行的标签。a、b、c、d、e分别是每列的标签 生成连续日期数据 使用方法date_range()&#xff0c;该方法有两…

Lazada商品详情API接口:深度解析与应用

前言 在当今电子商务的繁荣时代&#xff0c;对于电商平台来说&#xff0c;提供一套高效、稳定的API接口是非常重要的。Lazada&#xff0c;作为东南亚领先的电商平台之一&#xff0c;其API接口体系为卖家、开发者以及第三方服务提供了丰富的功能和数据支持。其中&#xff0c;商品…

邦注科技 模具保护器 CCD电子眼 专业工业视觉检测设备

模具保护器是一种用于保护模具的设备&#xff0c;可以在塑料压铸和冲床等加工过程中起到保护模具的作用。以下是关于模具保护器在保护塑料压铸和冲床模具方面的应用&#xff1a; 塑料压铸模具保护器&#xff1a; 防止碰撞&#xff1a;在塑料压铸过程中&#xff0c;模具可能会…

初识C++ · 内存管理

目录 1 C/C的内存分布 2 C语言的内存管理 3 C的内存管理 4 operator new 和 operator delete 5 定位new 1 C/C的内存分布 语言不同&#xff0c;内存分布是相同的&#xff0c;对于局部变量都是放在栈上&#xff0c;全局变量都是放在静态区&#xff08;数据段&#xff09;&…

jvm重要参数可视化和线上问题排查

jvm重要参数可视化和线上问题排查 目标jvm参数分类(了解)运行时数据区相关的&#xff08;jdk1.8&#xff09;处理 OOM 相关的垃圾回收器相关的GC 日志记录相关的意义,默认值,调优原则&#xff08;重要&#xff0c; 待拆分&#xff09; 排查 OOM 流程 和 常见原因参考文章 目标 …

基于C语言中的类型转换,C++标准创造出了更加可视化的类型转换

目录 前言 一、 C语言中的类型转换 二、为什么C需要四种类型转换 三、C中新增的四种强制类型转换操作符以及它们的应用场景 1.static_cast 2.reinterpret_cast 3.const_cast 4.dynamic_cast 前言 在C语言中&#xff0c;如果赋值运算符左右两侧的类型不同&#xff0c;或者…

短视频矩阵系统贴牌---saas源头开发

一、短视频矩阵运营注意事项&#xff1a; 如&#xff1a;房产行业 短视频矩阵运营是一个系统化的项目&#xff0c;涉及多个平台和账号的管理&#xff0c;以及内容的创作、发布和优化等多个方面。 以下是短视频矩阵运营的注意事项文档的概要以及结果运营数据 一周持续运营量 二…

uni-app 多列picker切换列显示对应内容

html部分&#xff1a; <view class"uni-list"><view class"uni-list-cell"><view class"uni-list-cell-left">选择用户</view><view class"uni-list-cell-db"><picker mode"multiSelector"…

【JavaWeb】网上蛋糕商城后台-类目管理,退出

概念 本文讲解和实现类目管理和管理员的退出功能。 类目列表信息 点击类目管理&#xff0c;向服务器发送请求/admin/type_list 在servlet包中创建AdminTypeListServlet类&#xff0c;获得所有商品分类 package servlet;import model.Type; import service.TypeService;impo…

网站localhost和127.0.0.1可以访问,本地ip不可访问解决方案

部署了一个网站, 使用localhost和127.0.0.1加端口号可以访问, 但是使用本机的ip地址加端口号却不行. 原因可能有多种. 可能的原因: 1 首先要确认是否localhost对应的端口是通的(直接网址访问), 以及你无法访问的那个本机ip是否正确(使用ping测试)&#xff1b; 2 检查本机的防火…

堆的基本操作(c语言实现)

1.堆的基本操作 1.1定义堆 typedef int HPDataType;//堆中存储数据的类型typedef struct Heap {HPDataType* a;//用于存储数据的数组int size;//记录堆中已有元素个数int capacity;//记录堆的容量 }HP;1.2初始化堆 然后我们需要一个初始化函数&#xff0c;对刚创建的堆进行初…

软件测试开发之 职业发展必备 能力模型解析

为什么要了解能力模型 王阳明曾在《传习录》中提到过一个思想&#xff1a;以终为始。所谓“以终为始”&#xff0c;意味着在行动的开始阶段就要考虑到最终的目标和结果&#xff0c;以此来指导自己的行动和选择。那么如果我们想在自己的行业内获取好的职业发展&#xff0c;第一…

Meta更低的训练成本取得更好的性能: 多token预测(Multi-Token Prediction)

Meta提出了一种透过多token预测(Multi-token Prediction)来训练更好、更快的大型语言模型的方法。这篇论文的重点如下: 训练语言模型同时预测多个未来的token,可以提高样本效率(sample efficiency)。 在推论阶段,使用多token预测可以达到最高3倍的加速。 论文的主要贡献包括: …

2024年Delphi自学培训网络资源

概述 Delphi 是一种基于 Object Pascal 的面向对象编程语言。最初&#xff0c;Delphi 是作为构建 Windows 应用程序的工具而创建的&#xff0c;并于 1995 年发布。从那时起&#xff0c;这些技术向前迈出了一大步&#xff0c;Delphi也不例外。尽管第一个用 Delphi 编写的应用程…

Windows 10 中使用 Montreal-Forced-Aligner (MFA) 实现音频和文本强制对齐

文章目录 一、实现目标二、安装 Montreal-Forced-Aligner1、使用 Anaconda 虚拟环境2、修改默认下载路径3、安装 montreal-forced-aligner 及相关第三方包4、验证是否安装成功 三、下载声学模型和发音词典1、命令行方式下载2、手动方式下载 四、强制对齐1、准备音频及对应文本2…

docker学习笔记(三)搭建NFS服务实验

目录 什么是NFS 简单架构​编辑 一.搭建nfs服务器 二.新建共享目录和网页文件 三.设置共享目录 四&#xff1a;创建使用nfs共享目录的卷 五&#xff1a;创建容器使用nfs-web-1卷 六&#xff1a;测试访问 七&#xff1a;是否同步测试 什么是NFS NFS 服务器&#xff1a;ne…

人工智能将改变科研?从胰腺癌早筛到新药研发

去年底英国《自然》杂志刊文预测的2024年十大科学进展中&#xff0c;人工智能的进步和ChatGPT人工智能占据前两位。那么&#xff0c;人工智能对于科学而言&#xff0c;它的哪些成果将带来有益的发展&#xff1f;今天我们请知名科普作者张田勘来聊聊这个话题。 &#xff08;1&am…

万兆以太网MAC设计(13)主机与FPGA之间进行PING

文章目录 前言&#xff1a;一、ICMP校验和计算二、上板效果1、终端命令行1、wireshark捕捉 前言&#xff1a; 在上板尝试进行PING操作的时候&#xff0c;发现一直是请求超时的情况&#xff0c;结果排查发现是首部校验和没有计算的问题。在UDP层&#xff0c;我们不进行校验和是…

ReentrantReadWriteLock源码分析

ReentrantReadWriteLock是基于AQS实现的读写锁&#xff0c;读锁与读锁不互斥、读锁与写锁互斥、写锁与写锁互斥。 类的继承关系 AQS提供了共享和排它两种模式&#xff0c;acquire/release、acquireShared/releaseShared 是AQS里面的两对模板方法。写锁是排它模式基于acquire/…

Yii2 自动生成php代码

文档地址&#xff1a;入门&#xff08;Getting Started&#xff09;: 用 Gii 生成代码&#xff08;Generating Code with Gii&#xff09; - Yii 2.0 权威指南 - 文档 - Yii Framework 中文网 找到配置文件&#xff0c;以我的项目为例&#xff1a; 因为的是开启了路由美化所以访…