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

重温react-07(函数注释和useEffect的使用方式)

函数注释的介绍和使用方式

    // 函数注释的方式 和 使用方法/*** @description 视图更新了 --> 打印视图* @function useEffect   --> 函数名* @param arr { Array } 数组 -->参数* @param number { Number } 数字 --> 参数* @author zhouxiaobao  2024/06/26 -->作者* @version 1.0.0 -->函数版本* @example useEffect(() => {  -->实例函数console.log('视图更新了')console.log(document.getElementById('div'));},[number])* */

useEffect的具体用法(详细)

import React, { useState, useEffect,useRef } from 'react'
// 函数组件 useEffect的第二个参数的用法
export default function LearnFunction01() {// 定义一个变量 , 定义一个初始化的设置值的方式 , 传入初始值const [number, setNumber] = useState(0)// 这个是引用数据类型需要前后的值进行比较才能改变视图const [arr, setArr] = useState([1, 2, 3, 4])const [content, setContent] = useState('');const contentEditableRef = useRef(null);const handleInput = (e) => {const htmlContent = contentEditableRef.current.innerHTML;const textContent = new DOMParser().parseFromString(htmlContent, 'text/html').body.textContent || '';setContent(textContent);console.log(content, '输入的值');};// 函数注释的方式 和 使用方法/*** @description 视图更新了 --> 打印视图* @function useEffect   --> 函数名* @param arr { Array } 数组 -->参数* @param number { Number } 数字 --> 参数* @author zhouxiaobao  2024/06/26 -->作者* @version 1.0.0 -->函数版本* @example useEffect(() => {  -->实例函数console.log('视图更新了')console.log(document.getElementById('div'));},[number])* */useEffect(() => {console.log('视图更新了')console.log(document.getElementById('div'));}, [])/** * useEffect(() => {console.log('视图更新了')console.log(document.getElementById('div'));},[])* * 第二个参数是 [],代表现在不更新任何的,类似于vue中的watch ,初始化为 []的话,可以相当于mounted 或者onMounted,只会执行一次* 如果在这个场景中第二个参数是arr的话,只有arr发生变化的时候才会触发useEffect,相当于vue中的watch* * */return (<div><div id="div">{number}</div><button onClick={() => {setNumber(number + 1)}}>+</button><hr /><button onClick={() => {setArr([...arr, arr.length + 1])}}>点击增加arr的长度</button><div>{arr.map((item, index) => {return <div key={index}>{item}</div>})}</div><hr /><divref={contentEditableRef}contentEditablestyle={{ width: '200px', height: '100px', background: '#ccc', color: 'red' }}dangerouslySetInnerHTML={{ __html: content }}onInput={handleInput} ></div></div>)
}

剖析

  1. 下面的代码是第一种方式,后面加一个空数组的话,就相当于vue2中的mounted,只会调用一次hook函数中的方法。
  2. 第二个参数是arr(或者是其他的变量),代表现在不更新任何的,类似于vue中的watch。
  3. 初始化为 [ ]的话,可以相当于mounted 或者onMounted,只会执行一次。
  4. 如果在这个场景中第二个参数是arr的话,只有arr发生变化的时候才会触发useEffect,相当于vue中的watch。
useEffect(() => {console.log('视图更新了')console.log(document.getElementById('div'));},[])
useEffect(() => {console.log('视图更新了')console.log(document.getElementById('div'));},[arr])

题外知识div中的contentEditable属性

<divref={contentEditableRef}contentEditablestyle={{ width: '200px', height: '100px', background: '#ccc', color: 'red' }}dangerouslySetInnerHTML={{ __html: content }}onInput={handleInput} >
</div>

加上这个属性之后,可以对div进行编辑,相当于是富文本。

const handleInput = (e) => {const htmlContent = contentEditableRef.current.innerHTML;const textContent = new DOMParser().parseFromString(htmlContent, 'text/html').body.textContent || '';setContent(textContent);console.log(content, '输入的值');
};

需要在当前这个页面引入useRef

import React, { useRef } from 'react'

感觉还挺好用的。当然图片的话,建议使用专业的第三方的富文本插件

相关文章:

  • 秋招Java后端开发冲刺——非关系型数据库篇(Redis)
  • SSM OA办公系统19159
  • 使用ECharts实现动态数据可视化的最佳实践
  • 2024年建筑八大员(质量员-土建专业)考试题库。全面提升考试成绩,轻松过级!
  • js删除el-table删除新增项,有的已经保存有的未经保存
  • php开发的系统/软件如何实现闭源?
  • 如何下载huggingface仓库里某一个文件
  • AI推介-多模态视觉语言模型VLMs论文速览(arXiv方向):2024.06.20-2024.06.25
  • 在 PMP 考试中,项目管理经验不足怎么办?
  • 边缘计算节点 BEC 实践:如何快速准备裸金属服务器 Windows 自定义镜像?
  • X-ObjectMount: 对象存储访问接入的新选择
  • 读-改-写操作
  • java map对象格式化为json对象
  • 【第二周】基础语法学习
  • 征求意见《第三方运维服务水平评价指南 工业废水处理设施》
  • Angular4 模板式表单用法以及验证
  • Angularjs之国际化
  • C++11: atomic 头文件
  • Elasticsearch 参考指南(升级前重新索引)
  • Flannel解读
  • in typeof instanceof ===这些运算符有什么作用
  • iOS 颜色设置看我就够了
  • JAVA_NIO系列——Channel和Buffer详解
  • Java知识点总结(JavaIO-打印流)
  • Logstash 参考指南(目录)
  • mongo索引构建
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • tensorflow学习笔记3——MNIST应用篇
  • vue-router的history模式发布配置
  • 产品三维模型在线预览
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 多线程 start 和 run 方法到底有什么区别?
  • 入门级的git使用指北
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 说说我为什么看好Spring Cloud Alibaba
  • ​TypeScript都不会用,也敢说会前端?
  • #pragma pack(1)
  • (12)Hive调优——count distinct去重优化
  • (12)目标检测_SSD基于pytorch搭建代码
  • (2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (一) springboot详细介绍
  • (一)插入排序
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转载)Linux 多线程条件变量同步
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .Net FrameWork总结
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .net6+aspose.words导出word并转pdf
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装