”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > React 初学者指南:基础知识入门

React 初学者指南:基础知识入门

发布于2024-11-07
浏览:369

A Beginner’s Guide to React: Getting Started with the Basics

React 已成为现代 Web 开发的基石,以其高效、灵活性和强大的生态系统而闻名。 React 由 Facebook 开发,允许开发人员创建可重用的 UI 组件,从而简化了构建交互式用户界面的过程。

无论您是想构建复杂的单页应用程序还是只是想提高您的 Web 开发技能,掌握 React 都是一笔宝贵的财富。

在本指南中,我们将引导您了解 React 入门的基本概念和步骤,包括设置开发环境、了解 React 基础知识以及创建您的第一个组件。

什么是反应?

React 是一个用于构建用户界面的 JavaScript 库,特别是对于需要动态和交互式用户体验的单页应用程序。从本质上讲,React 允许开发人员构建封装的组件来管理自己的状态并组合它们以创建复杂的 UI。 React 的声明性性质使您更容易推理应用程序,而其基于组件的架构则提高了可重用性和可维护性。

React 的简史和演变

React 于 2013 年由 Facebook 首次发布,并因其构建 UI 的创新方法而迅速受到关注。与直接操作 DOM 的传统库和框架不同,React 引入了虚拟 DOM 的概念。这种抽象允许 React 通过仅更新已更改的 UI 部分来优化渲染,从而实现更高效的性能。

自诞生以来,React 已经发生了显着的发展,引入了钩子、上下文 API 和并发渲染等功能。该库拥有一个充满活力的生态系统,围绕它构建了大量工具、库和框架,进一步增强了其功能。

React 的主要特点

  1. 基于组件的架构:React 基于组件的方法允许开发人员将复杂的 UI 分解为更小的、可重用的部分,每个部分都有自己的逻辑和渲染。

  2. 虚拟 DOM:虚拟 DOM 是真实 DOM 的内存表示。 React 使用这个虚拟 DOM 通过与之前的状态进行比较并仅应用必要的更改来有效地更新 UI。

  3. 声明性语法:React 的声明性语法通过描述任何给定状态下 UI 的外观,而不是指定如何更改 UI,使设计 UI 变得更加容易。

  4. 单向数据流:React强制执行单向数据流,这意味着数据从父组件流向子组件,从而更容易跟踪和管理状态更改。

设置开发环境

在深入研究 React 之前,您应该对 HTML、CSS 和 JavaScript 有基本的了解。熟悉这些技术将帮助您更有效地掌握 React 概念,因为 React 建立在这些基本的 Web 技术之上。

安装 Node.js 和 npm

React开发需要Node.js和npm(Node Package Manager),它们用于管理项目依赖和运行开发工具。

如何安装 Node.js 和 npm:

  1. 下载并安装Node.js:前往Node.js官方网站,下载适合您操作系统的最新LTS(长期支持)版本。该安装包包含npm。

  2. 验证安装:安装后,打开终端(或命令提示符)并运行以下命令来验证 Node.js 和 npm 是否已正确安装:

   node -v
   npm -v

您应该看到 Node.js 和 npm 的版本号,确认安装成功。

创建反应应用程序

开始使用 React 的最简单方法是使用 create-react-app 工具,该工具使用合理的默认配置设置一个新的 React 项目。

初始化新 React 项目的分步指南:

  1. 全局安装 create-react-app:打开终端并运行:
   npx create-react-app my-app

将 my-app 替换为您想要的项目名称。此命令使用给定名称创建一个新目录,并在其中设置一个 React 项目。

  1. 导航到您的项目目录
   cd my-app
  1. 启动开发服务器
   npm start

此命令运行开发服务器并在默认 Web 浏览器中打开新的 React 应用程序。您应该看到默认的 React 欢迎页面,表明一切都已正确设置。

了解 React 基础知识

组件是 React 应用程序的构建块。它们封装了 UI 元素和逻辑,使管理和重用代码变得更加容易。组件可分为两类:

  1. 功能组件:这些是返回 React 元素的 JavaScript 函数。它们通常用于简单的无状态组件。

例子:

   function Welcome(props) {
     return 

Hello, {props.name}

; }
  1. Class Components:这些是扩展 React.Component 并包含 render 方法的 ES6 类。它们用于具有本地状态和生命周期方法的更复杂的组件。

例子:

   class Welcome extends React.Component {
     render() {
       return 

Hello, {this.props.name}

; } }

JSX(JavaScript XML)

JSX 是 JavaScript 的语法扩展,允许您在 JavaScript 中编写类似 HTML 的代码。它使创建 React 元素和组件变得更加容易。

JSX 如何转换为 JavaScript:

JSX 本身并不是有效的 JavaScript。在构建过程中,像 Babel 这样的工具会将 JSX 转换为常规 JavaScript。例如:

JSX:

const element = 

Hello, world!

;

转换后的 JavaScript:

const element = React.createElement('h1', null, 'Hello, world!');

道具(属性)

Props 用于将数据从父组件传递到子组件。它们是只读的,有助于使组件可重用。

将 Pros 传递给组件的示例:

function Greeting(props) {
  return 

Welcome, {props.username}!

; } function App() { return ; }

在此示例中,Greeting 组件从 App 组件接收用户名 prop 并显示它。

状态

状态允许组件管理自己的数据并对用户交互做出反应。在功能组件中,useState钩子用于管理状态。

useState Hook介绍:

useState 挂钩是一个函数,它返回一个包含两个元素的数组:当前状态值和更新它的函数。

使用useState进行状态管理的示例:

import React, { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0);

  return (
    

You clicked {count} times

); }

在此示例中,计数器组件维护计数状态。单击按钮会更新状态,UI 会反映新的计数值。

构建你的第一个 React 组件

让我们创建一个简单的功能组件来显示问候消息。

分步示例:

  1. 创建一个新文件:在项目的src目录下,创建一个名为Greeting.js的文件。

  2. 定义组件:

   import React from 'react';

   function Greeting() {
     return 

Hello, React!

; } export default Greeting;
  1. 渲染组件:打开 src/App.js 并渲染 Greeting 组件。
   import React from 'react';
   import Greeting from './Greeting';

   function App() {
     return (
       
); } export default App;

添加基本​​样式

您可以使用内联样式或外部 CSS 文件设置组件的样式。添加基本​​样式的方法如下:

  1. 内联样式
   function StyledGreeting() {
     const style = {
       color: 'blue',
       textAlign: 'center'
     };

     return 

Hello, styled React!

; }
  1. 外部CSS:在src目录下创建CSS文件(Greeting.css)。
   .greeting {
     color: green;
     text-align: center;
   }

在Greeting.js中导入CSS文件并应用类:

   import React from 'react';
   import './Greeting.css';

   function Greeting() {
     return 

Hello, styled React!

; } export default Greeting;

结论

React 是一个功能强大的库,使开发人员能够高效地构建动态和交互式用户界面。在本指南中,我们介绍了 React 的基础知识,包括其核心概念、设置开发环境、了解组件、JSX、props 和状态,以及构建您的第一个组件。我们还探索了增强组件的样式选项。

版本声明 本文转载于:https://dev.to/emmanuelbolade/a-beginners-guide-to-react-getting-started-with-the-basics-27a4?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 对象拟合:IE和Edge中的封面失败,如何修复?
    对象拟合:IE和Edge中的封面失败,如何修复?
    To resolve this issue, we employ a clever CSS solution that solves the problem:position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%)...
    编程 发布于2025-07-18
  • 编译器报错“usr/bin/ld: cannot find -l”解决方法
    编译器报错“usr/bin/ld: cannot find -l”解决方法
    错误:“ usr/bin/ld:找不到-l “ 此错误表明链接器在链接您的可执行文件时无法找到指定的库。为了解决此问题,我们将深入研究如何指定库路径并将链接引导到正确位置的详细信息。添加库搜索路径的一个可能的原因是,此错误是您的makefile中缺少库搜索路径。要解决它,您可以在链接器命令中添加...
    编程 发布于2025-07-18
  • 如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    从python import codecs import codecs import codecs 导入 text = codecs.decode('这狗\ u0001f602'.encode('utf-8'),'utf-8') 印刷(文字)#带有...
    编程 发布于2025-07-18
  • 如何使用组在MySQL中旋转数据?
    如何使用组在MySQL中旋转数据?
    在关系数据库中使用mySQL组使用mySQL组进行查询结果,在关系数据库中使用MySQL组,转移数据的数据是指重新排列的行和列的重排以增强数据可视化。在这里,我们面对一个共同的挑战:使用组的组将数据从基于行的基于列的转换为基于列。 Let's consider the following ...
    编程 发布于2025-07-18
  • 找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    如何在mySQL中使用mySql 检索最大计数,您可能会遇到一个问题,您可能会在尝试使用以下命令:理解错误正确找到由名称列分组的值的最大计数,请使用以下修改后的查询: 计数(*)为c 来自EMP1 按名称组 c desc订购 限制1 查询说明 select语句提取名称列和每个名称...
    编程 发布于2025-07-18
  • 反射动态实现Go接口用于RPC方法探索
    反射动态实现Go接口用于RPC方法探索
    在GO 使用反射来实现定义RPC式方法的界面。例如,考虑一个接口,例如:键入myService接口{ 登录(用户名,密码字符串)(sessionId int,错误错误) helloworld(sessionid int)(hi String,错误错误) } 替代方案而不是依靠反射...
    编程 发布于2025-07-18
  • 如何在其容器中为DIV创建平滑的左右CSS动画?
    如何在其容器中为DIV创建平滑的左右CSS动画?
    通用CSS动画,用于左右运动 ,我们将探索创建一个通用的CSS动画,以向左和右移动DIV,从而到达其容器的边缘。该动画可以应用于具有绝对定位的任何div,无论其未知长度如何。问题:使用左直接导致瞬时消失 更加流畅的解决方案:混合转换和左 [并实现平稳的,线性的运动,我们介绍了线性的转换。这...
    编程 发布于2025-07-18
  • 版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    在时间戳列上使用current_timestamp或MySQL版本中的current_timestamp或在5.6.5 此限制源于遗留实现的关注,这些限制需要对当前的_timestamp功能进行特定的实现。 创建表`foo`( `Productid` int(10)unsigned not n...
    编程 发布于2025-07-18
  • 为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    使用php dateTime修改月份:发现预期的行为在使用PHP的DateTime类时,添加或减去几个月可能并不总是会产生预期的结果。正如文档所警告的那样,“当心”这些操作的“不像看起来那样直观。 ; $ date->修改('1个月'); //前进1个月 echo $ date->...
    编程 发布于2025-07-18
  • 如何在Java字符串中有效替换多个子字符串?
    如何在Java字符串中有效替换多个子字符串?
    在java 中有效地替换多个substring,需要在需要替换一个字符串中的多个substring的情况下,很容易求助于重复应用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    编程 发布于2025-07-18
  • 在Python中如何创建动态变量?
    在Python中如何创建动态变量?
    在Python 中,动态创建变量的功能可以是一种强大的工具,尤其是在使用复杂的数据结构或算法时,Dynamic Variable Creation的动态变量创建。 Python提供了几种创造性的方法来实现这一目标。利用dictionaries 一种有效的方法是利用字典。字典允许您动态创建密钥并分...
    编程 发布于2025-07-18
  • C++20 Consteval函数中模板参数能否依赖于函数参数?
    C++20 Consteval函数中模板参数能否依赖于函数参数?
    [ consteval函数和模板参数依赖于函数参数在C 17中,模板参数不能依赖一个函数参数,因为编译器仍然需要对非contexexpr futcoriations contim at contexpr function进行评估。 compile time。 C 20引入恒定函数,必须在编译时进行...
    编程 发布于2025-07-18
  • 为什么尽管有效代码,为什么在PHP中捕获输入?
    为什么尽管有效代码,为什么在PHP中捕获输入?
    在php ;?>" method="post">The intention is to capture the input from the text box and display it when the submit button is clicked.但是,输出...
    编程 发布于2025-07-18
  • 我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    将我的加密库从mcrypt升级到openssl 问题:是否可以将我的加密库从McRypt升级到OpenSSL?如果是这样,如何?答案:是的,可以将您的Encryption库从McRypt升级到OpenSSL。可以使用openssl。附加说明: [openssl_decrypt()函数要求iv参...
    编程 发布于2025-07-18
  • Java为何无法创建泛型数组?
    Java为何无法创建泛型数组?
    通用阵列创建错误 arrayList [2]; JAVA报告了“通用数组创建”错误。为什么不允许这样做?答案:Create an Auxiliary Class:public static ArrayList<myObject>[] a = new ArrayList<myO...
    编程 发布于2025-07-18

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3