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

react 18 Hooks扩展函数式组件的状态管理

React函数式组件

特点

React函数式组件具有以下特点:

  1. 简洁:使用函数的方式定义组件,语法简单直观。
  2. 无状态:函数式组件没有内部状态(state),只依赖于传入的props。
  3. 可复用:函数式组件易于复用,可以在多个地方使用相同的组件函数。
  4. 易于测试:函数式组件是纯函数,只依赖于输入的props,因此易于编写测试用例。

React提供了Hooks作为函数式组件的扩展,它们使函数式组件能够拥有状态和其他特性,例如使用useState来管理组件的状态、使用useEffect来处理副作用等。(注:副作用的来源:配置文件、用户的输入、数据库等等,所有的外部交互都有可能产生副作用,副作用会给程序带来安全隐患和不确定性,要尽可能的控制副作用在可控制的范围内发生。)

以下是一个使用Hooks扩展函数式组件的示例

 useState, useEffect

import React, { useState, useEffect } from 'react';function Counter(props) {const [count, setCount] = useState(0); //第一个为变量名,第二个参数为修改的方法useEffect(() => {  //相当于监听document.title = `Count: ${count}`;}, [count]);      //指定要监听的变量,发生变化后会执行第一个参数(函数)//什么也不传的话,每一个useState变量变化都会执行//传入空数组[]的话,只会在页面挂载的时候执行return (<div><p>Count: {props.name}</p><p>Count: {count}</p><button onClick={() => setCount(count + 1)}>Increment</button></div>);
}

在上面的示例中,我们使用useState来创建了一个名为count的状态变量,并使用setCount函数来更新状态。我们还使用了useEffect来在组件渲染后更新文档标题,并在count发生变化时进行更新。


通过 useContext 获取上下文的值(在父组件ParentComponent中,我们将需要共享的数据 name通过 MyContext.Provider 提供给子组件。)

import React, { createContext, useContext } from 'react';// 创建一个上下文
const MyContext = createContext();// 父组件
const ParentComponent = () => {const name = 'John';return (<MyContext.Provider value={name}><ChildComponent /></MyContext.Provider>);
};// 子组件
const ChildComponent = () => {// 使用 useContext 获取上下文的值const name = useContext(MyContext);return <h1>Hello, {name}!</h1>;
};// 渲染应用
const App = () => {return <ParentComponent />;
};export default App;

 

http://www.lryc.cn/news/267252.html

相关文章:

  • 智能优化算法应用:基于浣熊算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • c++ qt QtWidgetsApplication 项目 使用外部ui
  • 使用React 18、Echarts和MUI实现温度计
  • 使用代码生成工具快速开发应用-结合后端Web API提供接口和前端页面快速生成,实现通用的业务编码规则管理
  • Android 13 - Media框架(26)- OMXNodeInstance(三)
  • 力扣题目学习笔记(OC + Swift)21. 合并两个有序链表
  • C# WPF上位机开发(windows pad上的应用)
  • Word使用技巧【开题报告】
  • 电子学会C/C++编程等级考试2022年06月(七级)真题解析
  • git中的smart checkout和force checkout
  • vue3整合Element-Plus,极速上手。
  • 学习Vue2.x
  • 新手如何快速熟悉代码,写出东西(持续更新)
  • 11-网络安全框架及模型-软件安全能力成熟度模型(SSCMM)
  • Linux操作系统基础知识点
  • python 通过opencv及face_recognition识别人脸
  • Android开发中常见的Hook技术有哪些?
  • 【linux c多线程】线程的创建,线程信息的获取,获取线程返回值
  • MFC或QT中,自绘控件的目的和实现步骤
  • ceph集群搭建详细教程(ceph-deploy)
  • 机器视觉系统选型-避免畸变
  • 机器学习笔记 - 线性判别分析(LDA)的原理和应用
  • 基于5G智能网关的智慧塔吊监测方案
  • CountDownLatch详解以及用法示例
  • 【http】缓存协议
  • vscode中使用GitHub Copilot Chat
  • lvgl 双物理显示器的驱动实现
  • 论文阅读——X-Decoder
  • 【Kubernetes】控制器Statefulset
  • 智能优化算法应用:基于鱼鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码