IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> React 函数式组件与类式组件渲染次数比较 -> 正文阅读

[JavaScript知识库]React 函数式组件与类式组件渲染次数比较

前言

有价值的参考文章《轻松学会 React 钩子:以 useEffect() 为例

写惯了类式组件,突然想试下函数式组件,可发现获取数据时组件渲染了4次,比函数式组件多1次。
在线示例请看《React组件比较》

类式组件

ts写的类式组件如下:

export interface HomeSub1Props {}
export interface HomeSub1State {
  datas: any;
}
let renderCount = 0;
let queryCount = 0;
class HomeSub1 extends React.Component<HomeSub1Props, HomeSub1State> {
  constructor(props: HomeSub1Props) {
    super(props);
    this.state = {
      datas: undefined
    };
  }
  componentDidMount() {
    this.queryDatas();
  }

  queryDatas() {
    console.log("我被调用了!");
    queryCount++;
    fetch(
      "https://elevation3d.arcgis.com/arcgis/rest/services/World_Imagery/MapServer?f=json"
    )
      .then((response) => response.json())
      .then((data) => {
        console.log(data);
        this.setState({
          datas: data
        });
      });
  }

  onRefresh() {
    this.queryDatas();
  }

  render() {
    renderCount++;
    console.log(renderCount);
    return (
      <div>
        <div>查询次数{queryCount}</div>
        <div>查询数据{this.state.datas?.currentVersion}</div>
        <div>渲染次数{renderCount}</div>
        <button onClick={this.onRefresh.bind(this)}>刷新数据 </button>
      </div>
    );
  }
}

执行上述代码,发现渲染如下:
在这里插入图片描述
点击“刷新数据”,渲染如下,发现渲染次数增加了2次
在这里插入图片描述
注释掉componentDidMount里的查询方法,发现渲染了1次
在这里插入图片描述

函数式组件

let renderCount = 0;
let queryCount = 0;
function HomeSub2() {
  const [datas, setDatas] = useState(undefined);
  function queryDatas() {
    console.log("我被调用了!");
    queryCount++;
    fetch(
      "https://elevation3d.arcgis.com/arcgis/rest/services/World_Imagery/MapServer?f=json"
    )
      .then((response) => response.json())
      .then((data) => {
        console.log(data);
        setDatas(data);
      });
  }

  useEffect(() => {
    queryDatas();
  }, []);

  function onRefresh() {
    this.queryDatas();
  }
  renderCount++;
  return (
    <div>
      <div>查询次数{queryCount}</div>
      <div>查询数据{datas?.currentVersion}</div>
      <div>渲染次数{renderCount}</div>
      <button onClick={onRefresh}>刷新数据 </button>
    </div>
  );
}
  1. 执行上面代码,发现渲染次数比类组件多1次
    在这里插入图片描述
  2. 点击刷新数据,渲染次数为6,比之前多了2次
    在这里插入图片描述
  3. 如果注释掉useEffect的查询数据函数,渲染了2次在这里插入图片描述
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-07 11:56:25  更:2021-12-07 11:57:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:54:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码