react的1.函数组件2.usestate3.useeffect4.ref5.fragment6.contex 代码加注释

news/2024/7/7 21:04:06

React是一种流行的JavaScript库,用于构建用户界面。它提供了许多有用的功能,其中包括函数组件、useState、useEffect、ref、fragment和context。在本文中,我们将深入探讨这些功能,并提供代码示例和注释。

1.函数组件

函数组件是React中最简单的组件类型之一。它们是纯函数,接受一些输入并返回一个React元素。下面是一个简单的函数组件示例:

function Welcome(props) {
  return <h1>Hello, {props.name}!</h1>;
}

这个函数组件接受一个名为props的对象参数,并返回一个h1元素,其中包含一个问候语和props.name的值。在React中,可以通过将组件名称作为标签使用来渲染函数组件,就像这样:

<Welcome name="Alice" />

这将渲染一个<h1>元素,其中包含“Hello, Alice!”的文本。

2.useState

useState是React提供的一个钩子函数,用于在函数组件中添加状态。它接受一个初始状态值,并返回一个数组,其中第一个元素是当前状态值,第二个元素是更新状态值的函数。下面是一个示例:

import React, { useState } from 'react';

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

  function handleClick() {
    setCount(count + 1);
  }

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={handleClick}>Click me</button>
    </div>
  );
}

在这个例子中,我们使用useState来添加一个计数器状态。我们定义了一个名为count的状态变量,并使用setCount函数来更新它。我们还定义了一个名为handleClick的函数,该函数在按钮点击时将计数器值增加1。最后,我们将计数器值和按钮元素呈现在页面上。

3.useEffect

useEffect是React提供的另一个钩子函数,用于在函数组件中添加副作用。副作用是指在组件渲染期间发生的任何事情,例如从API获取数据、订阅事件或更改DOM元素。下面是一个示例:

import React, { useState, useEffect } from 'react';

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

  useEffect(() => {
    document.title = `You clicked ${count} times`;
  });

  function handleClick() {
    setCount(count + 1);
  }

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={handleClick}>Click me</button>
    </div>
  );
}

在这个例子中,我们使用useEffect来更新页面标题。我们定义了一个匿名函数,该函数在组件渲染后运行,并将页面标题设置为当前计数器值。每次计数器值更改时,该函数都会再次运行,以便更新页面标题。

4.ref

ref是React提供的一个特殊属性,用于访问DOM元素或组件实例。它通常用于处理表单输入、媒体播放器或其他需要直接访问DOM元素的功能。下面是一个示例:

import React, { useRef } from 'react';

function TextInput() {
  const inputRef = useRef(null);

  function handleClick() {
    inputRef.current.focus();
  }

  return (
    <div>
      <input type="text" ref={inputRef} />
      <button onClick={handleClick}>Focus input</button>
    </div>
  );
}

在这个例子中,我们使用useRef来创建一个名为inputRef的引用。我们将此引用传递给<input>元素的ref属性,以便我们可以在handleClick函数中访问它。当按钮被点击时,我们调用focus()方法,该方法将焦点设置为输入元素。

5.fragment

fragment是React提供的一个特殊元素,用于将多个子元素分组在一起,而无需向DOM添加额外的节点。下面是一个示例:

import React from 'react';

function List() {
  return (
    <>
      <li>Item 1</li>
      <li>Item 2</li>
      <li>Item 3</li>
    </>
  );
}

在这个例子中,我们使用<></>标记来创建一个fragment元素。我们将三个<li>元素包装在fragment中,以便我们可以将它们作为单个元素呈现在页面上。

6.context

context是React提供的一种机制,用于在组件之间共享数据,而无需通过props进行传递。它通常用于主题、用户身份验证或其他需要全局访问的数据。下面是一个示例:

import React, { createContext, useContext } from 'react';

const ThemeContext = createContext('light');

function ThemeButton() {
  const theme = useContext(ThemeContext);

  return (
    <button style={{ background: theme === 'dark' ? 'black' : 'white', color: theme === 'dark' ? 'white' : 'black' }}>
      {theme === 'dark' ? 'Dark' : 'Light'} theme
    </button>
  );
}

function App() {
  return (
    <ThemeContext.Provider value="dark">
      <ThemeButton />
    </ThemeContext.Provider>
  );
}

在这个例子中,我们使用createContext来创建一个名为ThemeContext的上下文。我们定义了一个名为ThemeButton的组件,并使用useContext钩子来访问ThemeContext的值。我们还定义了一个名为App的组件,并在其中包装<ThemeButton>元素,以便我们可以将ThemeContext的值设置为“dark”。最后,我们将<ThemeButton>元素呈现在页面上,并根据主题值更改按钮的样式和文本。


http://lihuaxi.xjx100.cn/news/1570285.html

相关文章

Centos7中如何打开和关闭防火墙??CentOS 7以上默认使用firewall作为防火墙改为iptables

1 防火墙系统为firewall的关闭和打开方式 Centos 7中默认的linux的系统默认防火墙不是iptables,而是firewall,此时应该使用以下方式关闭防火墙了。 &#xff08;1&#xff09;关闭防火墙 systemctl stop firewalld.service #停止firewall systemctl disable firewalld.servi…

大功率PID控温

#include "rtthread.h" #ifdef FRYER_TEMP_PID //PID控温 #include "pid.h" #include "string.h"#define DBG_TAG "app.pid" #define DBG_LVL DBG_INFO #include <rtdbg.h>/** * PID运算. * U(k)KP*[E(k)-E(k-1)]KI*E(k…

使用ElementUI完成登入注册的跨域请求提高开发效率

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《Spring与Mybatis集成整合》​​​​​​​ ⛺️ 生活的理想&#xff0c;为了不断更新自己 ! 目录 ​编辑 1、前言 1.1.什么是ELementUI 2、完成登陆注册前端页面 2.1环境搭建 运行…

Spring MVC 九:Context层级(基于配置)

Context层级的问题&#xff0c;前面文章应该已经说清楚了。 只不过&#xff0c;前面文章是以注解方式举例说明的&#xff0c;通过配置方式怎么体现Context层级呢&#xff1f;有必要也说一下&#xff0c;毕竟现在很多项目都是基于xml配置实现的。 web.xml 基于配置的Spring M…

十、补码朴素贝叶斯算法(Complement NB,Complement Naive Bayes)(有监督学习)

Rennie 等人&#xff08;2003 年&#xff09;所描述的补码朴素贝叶斯分类器Complement Naive Bayes 分类器 该分类器旨在纠正标准多项式直觉贝叶斯分类器的 “严重假设” 它特别适用于不平衡数据集。 一、算法思路 二、官网API 官网API 导包&#xff1a;from sklearn.naive_…

2023 年KPI (KPI:Key Performance Indicator) review

文章大纲 1. 总体情况2. 回顾与总结2.1 基础巩固2.2 工作内容充实计算机视觉coursera 2.3 AI 兴趣: NLP & AIGC2.4 面试、笔试题常读常新 (0%)2.5 读书笔记 参考文献与学习路径 2023 年的 kpi 本身就订的低&#xff0c;结果发现定的低也完不成&#xff0c;距离年底还有3个月…

java面试题-设计模式基础

面试专题-设计模式 前言 在平时的开发中&#xff0c;涉及到设计模式的有两块内容&#xff0c;第一个是我们平时使用的框架&#xff08;比如spring、mybatis等&#xff09;&#xff0c;第二个是我们自己开发业务使用的设计模式。 面试官一般比较关心的是你在开发过程中&#…

VB结合数据库实现-登录注册增删改查刷新

文章目录: 一&#xff1a;效果演示 二&#xff1a;实现思路 三&#xff1a;代码实现 form1 效果图 代码 form2 效果图 代码 form3 效果图 代码 一&#xff1a;效果演示 效果图◕‿◕✌✌✌ VB结合数据库实现-登录注册增删改查刷新 代码下载 数据库建表 外接程序—…