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

news/2024/7/15 19:06:52 标签: react.js, javascript

React函数式组件

特点

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

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

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

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

 useState, useEffect

javascript">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 提供给子组件。)

javascript">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.niftyadmin.cn/n/5281345.html

相关文章

.raw 是一个 Anndata 包中的对象,用于存储原始的单细胞数据。scanpy种如何查看 .raw 对象的内容,

1查看 .raw 对象的内容&#xff0c;可以使用以下方法&#xff1a; .raw 是一个 Anndata 包中的对象&#xff0c;用于存储原始的单细胞数据。 使用 .X 属性查看原始数据矩阵&#xff1a;.raw.X 这将返回一个 Numpy 数组&#xff0c;其中包含原始数据的数值。 使用 .var_names 属…

Vue——computed(计算属性和侦听器)

模板内的表达式非常便利&#xff0c;但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护&#xff0c;对于任何包含响应式数据的复杂逻辑&#xff0c;你都应该使用计算属性。 计算属性与methods区别&#xff1a; computed是带缓存的&#xff0…

HrSegNet 23年裂缝检测新文章基于PaddelPaddle和Paddleseg的复现

本文章是对2023年发表在Automation in Construction上论文 Real-time High-Resolution Neural Network with Semantic Guidance for Crack Segmentation 的复现。 我参考了作者上传至github的代码&#xff0c;并得到了作者的帮助。https://github.com/CHDyshli/HrSegNet4Cra…

安装gnvm,nodejs,npm使用方法

安装gnvm,nodejs,npm使用方法 一、安装gnvm gnvm.exe下载地址&#xff1a; https://download.csdn.net/download/hsg77/88651752 http://ksria.com/gnvm/#download 二、配置gnvm环境变量 新建目录&#xff0c;如&#xff1a;d:/nodejs 并把gnvm.exe存储到此目录 并把d:/node…

软件工程中关键的图-----知识点总结

目录 1.数据流图 2.变换型设计和事务型设计 3.程序流程图 4.NS图和PAD图&#xff1a; 5.UML图 1.用例图 2.类图 3.顺序图 4.协作图 本文为个人复习资料&#xff0c;包含个人复习思路&#xff0c;多引用&#xff0c;也想和大家分享一下&#xff0c;希望大家不要介意~ …

【JAVA面试题】什么是代码单元?什么是码点?

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 目录 前言 思路 代码单元&#xff08;Code Unit&#xff09;&#xff1a; 码点&#xff08;Code Point&#xff09;&#xff1a; 作…

ChatGPT真的不火了吗?

不是不火&#xff0c;而是不常用&#xff0c;所以才会产生这种错觉。。。 升级一个GPT4.0就可以体验GPT带来的震撼 实际上GPT在以肉眼可见的速度在增长 11月时ChatGPT服务崩的那几次&#xff0c;看一看大家用不上有多么着急就明白了~ 另外现在很方便普及了&#xff0c;国产…

Xcode15 iOS 17 Simulator 离线安装,模拟器安装

Xcode 15 安装包的大小相比之前更小&#xff0c;因为除了 macOS 的 Components&#xff0c;其他都需要动态下载安装&#xff0c;否则提示 iOS 17 Simulator Not Installed。 如果不安装对应的运行模拟库 无法真机和模拟器运行&#xff0c;更无法新建项目。但是由于模拟器安装包…