当前位置: 首页 > article >正文

React基础

一、组件

React 应用程序是由 组件 组成的。一个组件是 UI(用户界面)的一部分,它拥有自己的逻辑和外观。组成网页单个部分的一组代码,如按钮、导航栏、卡片等,也可以大到整个页面。它是组成网页单个部分的一组代码,如按钮、导航栏、卡片等。它就像一个JavaScript函数,但返回一个渲染的元素。它接受称为"prop"的参数。组件以大写字母命名。

函数组件示例

function MyButton(prop) {
  return (
    <button>I'm a {prop.color} button</button>
  );
}

注意事项

  • 推荐使用函数组件而不是基于类的组件。

  • 函数组件通常被称为无状态组件。

二、JSX

JSX是JavaScript XML的缩写,它允许我们在React中编写HTML。它引入了类似XML的标签和属性来创建React元素。它通过让你在.jsx文件中编写类似HTML的代码,使创建React组件变得容易。JSX使代码可读性更强、更整洁,而不是使用复杂的JavaScript。React DOM使用驼峰式命名属性,如htmlFor、onClick。

JSX 比 HTML 更加严格。你必须闭合标签,如 <br />。你的组件也不能返回多个 JSX 标签。你必须将它们包裹到一个共享的父级中,比如 <div>...</div> 或使用空的 <>...</> 包裹

JSX示例

function AboutPage() {
  return (
    <>
      <h1>About</h1>
      <p>Hello there.<br />How do you do?</p>
    </>
  );
}

TSX是包含JSX语法的TypeScript文件的文件扩展名。使用TSX,你可以编写类型检查的代码,同时使用现有的JSX语法。使用TSX文件,你可以同时使用TypeScript和JSX编写React组件。

TSX示例

interface AgeProps {
  age: number;
}

const GreetAge = (props: AgeProps) => {
  return (
    <div>
      你好,你 {props.age} 岁了。
    </div>
  );
};

三、Fragments

当你需要单个元素时,你可以使用 <Fragment> 将其他元素组合起来,使用 <Fragment> 组合后的元素不会对 DOM 产生影响,就像元素没有被组合一样。在大多数情况下,<Fragment></Fragment> 可以简写为空的 JSX 元素 <></>

Fragments示例

function Post() {
  return (
    <>
      <PostTitle />
      <PostBody />
    </>
  );
}

注意事项

  • Fragments使代码更整洁、更易读。

  • 它们在内存使用上更高效。

  • 它们不能有CSS样式。

四、Props

React 组件使用 props 来互相通信。每个父组件都可以提供 props 给它的子组件,从而将一些信息传递给它。Props 可能会让你想起 HTML 属性,但你可以通过它们传递任何 JavaScript 值,包括对象、数组和函数。

props示例

//父组件
function Header() {
  <Avatar
    size={100}
    person={{
      name: "Katsuko Saruhashi",
      imageId: "YfeOqp2",
    }}
  />;
}
//子组件
function Avatar({ person, size }) {
  return (
    <img
      className="avatar"
      src={getImageUrl(person)}
      alt={person.name}
      width={size}
      height={size}
    />
  );
}

注意事项

  • Props是只读的,这确保了子组件不会操纵来自父组件的值。不要尝试“更改 props”。

五、State

当用户与组件交互时,组件需要跟踪某些值。例如,当用户点击亮/暗模式主题切换按钮时,它的值会改变(从亮到暗,反之亦然)。组件需要记住主题的当前值。在React中,这种特定于组件的内存被称为state。

定义state的示例

import { useState } from 'react';
const [index, setIndex] = useState(0);

注意事项

  • 在顶级组件中定义state总是一个好习惯,这样可以更容易地与其他子组件共享,并确保单一的事实来源。

六、hook

在 React 中,useState 以及任何其他以“use”开头的函数都被称为 Hook

hook示例

import { useState } from 'react';
const [index, setIndex] = useState(0);
const [showMore, setShowMore] = useState(false);

注意事项

  • use 开头的函数——只能在组件或自定hook的最顶层调用 你不能在条件语句、循环语句或其他嵌套函数内调用 Hook。Hook 是函数,但将它们视为关于组件需求的无条件声明会很有帮助。在组件顶部 “use” React 特性,类似于在文件顶部“导入”模块。
  • 惯例是将这对返回值命名为 const [thing, setThing]。你也可以将其命名为任何你喜欢的名称,但遵照约定俗成能使跨项目合作更易理解。

七、Context API

Context API用于在组件树中共享数据(如state、函数),而无需在每一级手动传递props。它通过简化状态管理和直接与将使用它的子组件共享数据来避免"prop钻取"。

createContext()方法用于创建一个context。这个函数返回一个context对象,其中包含两个组件 - Provider和Consumer。

Provider用于包裹你希望context可用的组件树部分。它接受一个必需的value prop,其中包含你想要在其他组件之间共享的数据。

useContext钩子用于访问数据。

Context API示例

使用createContext()方法创建一个context。将子组件包裹在Context Provider中,并提供state值。

import { useState, createContext} from "react";

const UserContext = createContext();

function ParentCounter() {
  const [count, setCount] = useState(10);

  return (
    <UserContext.Provider value={count}>
      <h1>{`当前计数: ${count}!`}</h1>
      <Button />
    </UserContext.Provider>
  );
}

使用useContext钩子访问count的值。

mport { useContext } from "react";

function GrandChildConsumer() {
  const count = useContext(UserContext);

  return (
    <>
      <h1>这是GrandChildConsumer</h1>
      <h2>{`当前计数: ${count}`}</h2>
    </>
  );
}

注意事项

通常使用useContext钩子而不是Consumer,以获得更好的可读性和简洁性。


http://www.kler.cn/a/301997.html

相关文章:

  • 跨域请求解决的核心
  • 从电动汽车到车载充电器:LM317LBDR2G 线性稳压器在汽车中的多场景应用
  • 深度神经网络DNN反向传播BP算法公式推导
  • Day44 | 动态规划 :状态机DP 买卖股票的最佳时机IV买卖股票的最佳时机III
  • 使用React和Vite构建一个AirBnb Experiences克隆网站
  • 【数据结构】线性表——栈与队列
  • [001-02-001]. 第07-03节:理解线程的安全问题
  • 空间物联网中的大规模接入:挑战、机遇和未来方向
  • 基于 onsemi NCV78343 NCV78964的汽车矩阵式大灯方案
  • Linux下进程间的通信--共享内存
  • 计算机视觉的应用33-基于双向LSTM和注意力机制融合模型的车辆轨迹预测应用实战
  • 五分钟让你学会threeJS
  • git 远程分支同步本地落后的有冲突的分支
  • Redis常用操作及springboot整合redis
  • web基础之文件上传
  • Kotlin 中的 `flatMap` 方法详解
  • wifiip地址可以随便改吗?wifi的ip地址怎么改变
  • Brave编译指南2024 Windows篇:安装Git(四)
  • FloodFill算法
  • 语言模型微调:提升语言Agent性能的新方向
  • HarmonyOS开发之使用Picker(从相册选择图片),并且通过Swiper组件实现图片预览
  • Day11笔记-字典基本使用系统功能字典推导式
  • 自定义spring security的安全表达式
  • Numpy中random.seed()函数的使用
  • librdkafka Windows编译
  • 【python因果推断库9】工具变量回归与使用 pymc 验证工具变量2