iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >react推荐函数组件的原因是什么
  • 902
分享到

react推荐函数组件的原因是什么

2023-07-04 18:07:06 902人浏览 泡泡鱼
摘要

这篇文章主要讲解了“React推荐函数组件的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“react推荐函数组件的原因是什么”吧!原因:1、函数组件语法更短、更简单,这使得它更容易

这篇文章主要讲解了“React推荐函数组件的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“react推荐函数组件的原因是什么”吧!

原因:1、函数组件语法更短、更简单,这使得它更容易开发、理解和测试;2、类组件过多的使用this让整个逻辑看起来很混乱;3、hooks功能也只支持函数组件;4、React团队针对函数组件做了更多的优化来避免非必要的检查和内存泄漏;5、函数式组件性能消耗小,因为函数式组件不需要创建实例,渲染的时候就执行一下,得到返回的react元素后就直接把中间量全部都销毁。

当使用React框架开发的时候,有两种方式创建组件,使用函数和使用类,目前函数组件越来越流行。下面通过举例的方式,分析函数组件和类组件的不同,并总结一下使用函数组件的原因(优势)。

JSX渲染方式

函数组件和类组件处理jsX的方式不同,就像他们的名字,函数组件是一个纯javascript函数,直接返回JSX;而类组件是一个Javascript类,通过扩展React.Component,并实现render方法,render方法中返回JSX。下面举例说明:

import React from "react";
const FunctionalComponent = () => {
return <h2>Hello, world</h2>;
};

上面通过es6箭头函数的形式定义了一个函数组件,函数体内直接返回JSX。如果你对箭头函数不熟悉,也可以写成下面这种形式:

import React from "react";
function FunctionalComponent() {
return <h2>Hello, world</h2>;
}

两种写法是一样的。

然后,来看看如何定义类组件,首先我们需要扩展React.Component,然后在render方法中返回JSX,具体看下面的代码片段:

import React, { Component } from "react";
class ClassComponent extends Component {
render() {
  return <h2>Hello, world</h2>;
}}

上面使用了ES6的解构赋值语法来导入模块,如果你对解构赋值语法不熟悉,也可以写成下面这种形式,会看上去更简洁一些:

import React from "react";
class ClassComponent extends React.Component {
render() {
  return <h2>Hello, world</h2>;
}
}

传递props

当需要向一个组件传递数据的时候,我们使用props,比如<FunctionalComponent name="Shiori" />,name就是Component的一个props属性,这里可以有更多属性。FunctionalComponent组件的函数形式的定义如下:

const FunctionalComponent = ({ name }) => {
return <h2>Hello, {name}</h2>;
};

或者不使用解构赋值

const FunctionalComponent = (props) => {
return <h2>Hello, {props.name}</h2>;
};

这种方式,你需要使用props.name来获取name属性。

然后,我们来看看类组件如何使用props,

class ClassComponent extends React.Component {
 render() {
   const { name } = this.props;
   return <h2>Hello, { name }</h2>;
}}

在类组件中,你需要使用this来获取props,然后可以使用解构赋值获取name属性。

处理state

在React项目中,我们不可避免的要处理状态变量。类组件直到最近才支持处理状态,然而,从React从16.8版本开始,函数组件支持钩子方法useState,这样我们可以很方便的在函数组件中使用状态变量。下面通过一个counter计数器实例来说明它们的不同。

在函数组件中处理状态变量

const FunctionalComponent = () => {
const [count, setCount] = React.useState(0);
return (
  <div>
    <p>count: {count}</p>
    <button onClick={() => setCount(count + 1)}>Click</button>
  </div>
);};

这里使用useState钩子,它接收一个初始的state作为参数。在本例中,计数器从0开始,所以我们给count一个初始值0。

state的初始值支持各种数据类型,包括null,string或者object对象,只要是javascript允许的都可以。在=号的左边,我们使用解构赋值的形式来接受useState的返回值,包括当前的状态变量和更新该变量的setter函数,即countsetCount

在类组件中处理状态变量

class ClassComponent extends React.Component {
constructor(props) {
  super(props);
  this.state = {
    count: 0
  };
}
render() {
  return (
    <div>
      <p>count: {this.state.count} times</p>
      <button onClick={() => this.setState({ count: this.state.count + 1 })}>
        Click
      </button>
    </div>
  );
}}

与函数组件大同小异,首先我们要理解React.Component的构造函数constructor,react的官方文档对constructor的定义如下:

“The constructor for a React component is called before it is mounted. When implementing the constructor for a React.Component subclass, you should call super(props) before any other statement. Otherwise, this.props will be undefined in the constructor, which can lead to bugs.”

翻译一下,

React组件的constructor方法会在组件完全加载完成之前调用。在constructor方法中,你需要在第一行调用super(props),否则会报this.props是undefined的错误。

如果在类组件中,你没有实现constructor方法并调用super(props),那么所有的状态变量都将是undefined。所以,别忘记先定义constructor方法,在constructor方法中,我们需要给this.state一个初始值,像上面的代码那样。然后我们可以在JSX中使用this.state.count来获取count的值,setter的使用也是类似的。

这里先定义一个onClick方法,后面会用到,

onClick={() =>
 this.setState((state) => {
   return { count: state.count + 1 };
 })}

这里注意setState()方法接收的是个箭头函数,而箭头函数的参数是state和props,props是可选的,这里没用到就没写。

生命周期函数

React的组件在它整个的渲染的过程中,有它的生命周期。如果你之前一直使用类组件,刚刚接触函数组件,你可能会疑惑,为什么在函数组件中没有componentDidMount()这类的生命周期方法?但是别急,有其他的钩子函数可以使用。

加载阶段

类组件的生命周期函数componentDidMount会在首次渲染完成之后调用。首次渲染完成之前会调用componentWillMount ,但是这个方法在新版本的React中不推荐使用了。

在函数组件中,我们使用useEffect钩子函数来处理生命周期内的事件,像下面这样,

const FunctionalComponent = () => {
React.useEffect(() => {
  console.log("Hello");
}, []);
return <h2>Hello, World</h2>;};

useEffect有两个参数,第一个是箭头函数,第二个是[][]里面是变化的state(s)。什么意思呢?就是[]中的状态变化了,箭头函数会被调用。如果像现在这样写个[],那箭头函数只会在组件第一次渲染之后调用一次,其功能类似下面类组件的componentDidMount

class ClassComponent extends React.Component {
componentDidMount() {
  console.log("Hello");
}
render() {
  return <h2>Hello, World</h2>;
}}

卸载阶段

const FunctionalComponent = () => {
React.useEffect(() => {
  return () => {
    console.log("Bye");
  };
}, []);
return <h2>Bye, World</h2>;};

这里注意return的也是一个箭头函数,这个函数就是在卸载阶段执行的。当你需要执行一些卸载操作,可以放在这里,比如你可以把clearInterval放在这里,避免内存泄漏。使用useEffect钩子函数的最大好处就是可以把加载函数和卸载函数放在一个同一个地方。这里对比一下类组件的写法:

class ClassComponent extends React.Component {
componentWillUnmount() {
  console.log("Bye");
}
render() {
  return <h2>Bye, World</h2>;
}}

感谢各位的阅读,以上就是“react推荐函数组件的原因是什么”的内容了,经过本文的学习后,相信大家对react推荐函数组件的原因是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: react推荐函数组件的原因是什么

本文链接: https://www.lsjlt.com/news/346681.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • react推荐函数组件的原因是什么
    这篇文章主要讲解了“react推荐函数组件的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“react推荐函数组件的原因是什么”吧!原因:1、函数组件语法更短、更简单,这使得它更容易...
    99+
    2023-07-04
  • react为什么推荐函数组件
    本教程操作环境:Windows7系统、react18版、Dell G3电脑。当使用React框架开发的时候,有两种方式创建组件,使用函数和使用类,目前函数组件越来越流行。下面通过举例的方式,分析函数组件和类组件的不同,并总结一下使用函数组件...
    99+
    2023-05-14
    javascript React
  • MySql主键id不推荐使用UUID的原因是什么
    本文小编为大家详细介绍“MySql主键id不推荐使用UUID的原因是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySql主键id不推荐使用UUID的原因是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧...
    99+
    2023-07-05
  • React函数式组件与类组件的不同点是什么
    本文小编为大家详细介绍“React函数式组件与类组件的不同点是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“React函数式组件与类组件的不同点是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。区别区别函...
    99+
    2023-06-29
  • react要用合成事件的原因是什么
    本文小编为大家详细介绍“react要用合成事件的原因是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“react要用合成事件的原因是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新...
    99+
    2024-04-02
  • react白屏原因是什么
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。react白屏原因是什么?react history模式下的白屏问题近期,再用react的时候,由于不想用丑陋的hash,便将路由模式切换成history...
    99+
    2023-05-14
    React
  • react要用专门的组件来渲染列表的原因是什么
    这篇文章主要介绍“react要用专门的组件来渲染列表的原因是什么”,在日常操作中,相信很多人在react要用专门的组件来渲染列表的原因是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望...
    99+
    2024-04-02
  • $_FILES数组为空的原因是什么
    这篇文章给大家分享的是有关$_FILES数组为空的原因是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。做上传的文件时候,打印$_files总是为空,查阅了下资料。发现是 ma...
    99+
    2024-04-02
  • react不是mvvm框架的原因是什么
    这篇“react不是mvvm框架的原因是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“...
    99+
    2024-04-02
  • react中使用node的原因是什么
    这篇文章主要讲解了“react中使用node的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“react中使用node的原因是什么”吧! ...
    99+
    2024-04-02
  • Spring构造函数推断的原理是什么
    这篇文章主要介绍了Spring构造函数推断的原理是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Spring构造函数推断的原理是什么文章都会有所收获,下面我们一起来看看吧。正文Spring 提供了一组基本的...
    99+
    2023-07-05
  • Python没有main函数的原因是什么
    为什么必须强制main函数作为入口?这些语言都是编译语言,需要将代码编译成可执行的二进制文件。为了让操作系统/引导程序找到程序的开头,需要定义这样一个函数。简而言之,需要在大量可执行的代码中定义一个至关重要的的开头。不难看出,对于这些语言来...
    99+
    2023-05-14
    Python main
  • react引入虚拟dom的原因是什么
    这篇“react引入虚拟dom的原因是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“r...
    99+
    2024-04-02
  • React的组件通讯是什么
    本篇文章为大家展示了React的组件通讯是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。组件通讯介绍内容组件是独立且封闭的单元,默认情况下,只能使用组件自己的数据。在组件化过程中,我们将一个完整...
    99+
    2023-06-25
  • React组件里this指向了undefined的原理是什么
    这篇文章主要介绍“React组件里this指向了undefined的原理是什么”,在日常操作中,相信很多人在React组件里this指向了undefined的原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家...
    99+
    2023-07-05
  • Go数组比切片好的原因是什么
    这篇文章主要讲解了“Go数组比切片好的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go数组比切片好的原因是什么”吧!前段时间有播放一条快讯,就是 Go1.17 会正式支持切片(S...
    99+
    2023-06-15
  • Python中没有main函数的原因是什么
    Python中没有main函数的原因是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。为什么必须强制执行主函数这些语言是已编译的语言,需要将代码编译到可执行的二进制文件中,以...
    99+
    2023-06-16
  • javascript用函数式编程的原因是什么
    这篇“javascript用函数式编程的原因是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看...
    99+
    2024-04-02
  • react状态组件是什么
    这篇文章主要介绍了react状态组件是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 react状态组件有2...
    99+
    2024-04-02
  • React函数组件与类组件怎么使用
    这篇“React函数组件与类组件怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“React函数组件与类组件怎么使用”文...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作