广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >React如何创建组件
  • 167
分享到

React如何创建组件

2024-04-02 19:04:59 167人浏览 薄情痞子
摘要

目录前言 组件介绍创建类组件 关于 state 关于 render 创建函数组件 渲染组件 合成组件 提取组件 Props 是只读的 前言 这节我们将介绍 React 中组件的类别

前言

这节我们将介绍 React 中组件的类别,以及如何创建和使用组件。

本文会向你介绍以下内容:

  • 创建类组件
  • 创建函数组件
  • 渲染组件
  • 合成组件
  • 提取组件
  • Props 是只读的

组件介绍

组件(Components) 让你可以将用户界面分成独立的,可复用的小部件,并可以对每个部件进行单独的设计。

从定义上来说, 组件就像javascript的函数。组件可以接收任意输入(称为”props”), 并返回 React 元素,用以描述屏幕显示内容。

Props , 即属性(Property), 在代码中写作 props,故可用 props 指代 properties。
react中有两种组件:类组件(class components)、函数组件(function components)

创建类组件

类组件的定义有如下要求:

  • 类组件需要继承自 React.Component
  • 类组件必须实现render函数

es6之前,可以通过create-react-class 模块来定义类组件,但是目前官网建议我们使用ES6的class类定义。

使用class定义一个组件:


class App extends Component {
  constructor() {
    super()
    this.state = {}
  }

  render() {
    return <h2>Hello App</h2>
  }
}

我们来详细分析一下类组件有哪几个部分

  • constructor:这是类组件的构造函数,是可选的,我们通常在constructor中初始化一些数据;
  • this.state:我们在constructor中给类组件加入state属性,你可以理解为组件中有一个state对象,其中包含着各种属性,用于维护组件内部的数据。同时你可以通过this.state.<属性名>访问该属性;
  • render(): 该方法是 class 组件中唯一必须实现的方法,类组件通过render()返回组件的显示内容;

关于 state

我们可以通过this.state给类组件添加数据对象,我们可以通过this.state.<属性名>去访问我们setState中的属性。


constructor(props) {
    super(props);
    this.state = {
      name:"xhs-rookies"
    }
  }

render(){
    return <h2>{this.state.name}</h2>
  }

但是我们想要修改上述例子中的name属性的时候,则必须通过react给我们规定好的setState()方法,去给state添加或者修改其中的数值。


this.state.name = 'new xhs-rookies' //错误的方式,不允许采用
this.setState({ name: 'new xhs-rookies' }) //正确的方式

简单点来说,在 react 中页面是通过数据进行渲染,使用setState()更新的数据,react 会帮我们执行render()去更新页面,从而将页面中用到 state 中的数据全部更新。

关于 render

当 render 被调用时,它会检查 this.props 和 this.state 的变化并返回很多类型,很多时候我们选择让该方法返回 React 元素,然后交由 React 去渲染展示:

React 元素:

  • 通常通过 jsX 创建。
  • 例如,<div/> 会被 React 渲染为 DOM 节点,<MyComponent/> 会被 React 渲染为自定义组件;
  • 无论是 <div/> 还是 <MyComponent/> 均为 React 元素。

详细关于 render() 方法的内容请见React.Component - Render)

创建函数组件

函数组件是使用 function 来进行定义的函数,只是这个函数会返回和类组件中 render 函数返回一样的内容。

跟类组件相比,函数组件有自己的特点:

  • 没有生命周期,也会被更新并挂载,但是没有生命周期函数;
  • 没有 this(组件实例);
  • 没有内部状态(state);

我们来定义一个函数组件:


export default function App() {
  return <div>xhs rookies</div>
}

渲染组件

在前几篇中, 我们只遇到代表 DOM 标签的 React 元素:


const element = <div />

然而,元素也可以代表用户定义的组件:


const element = <Welcome name="xhs rookies" />

当 React 遇到一个代表用户定义组件的元素时,它将 JSX 属性以一个单独对象的形式传递给相应的组件。 我们将其称为 “props” 对象。

比如, 以下代码在页面上渲染“xhs rookies”:


function Welcome(props) {
  return <h1>Hello, {props.name}</h1>
}

const element = <Welcome name="xhs rookies" />
ReactDOM.render(element, document.getElementById('root'))

我们简单解释一下上面这个例子:

  • 我们调用了 ReactDOM.render() 方法并向其中传入了 <Welcome name="xhs rookies" /> 元素。
  • React 调用 Welcome 组件,并向其中传入了 {name: 'xhs rookies'} 作为 props 对象。
  • Welcome 组件返回 <h1>xhs rookies</h1>。
  • React DOM 迅速更新 DOM ,使其显示为 <h1>xhs rookies</h1>。

注意: 组件名称总是以大写字母开始。

举例来说, <div/> 代表一个 DOM 标签,而 <Welcome/> 则代表一个组件,并且需要在作用域中有一个 Welcome 组件。

你可以深入 JSX阅读更多关于这点背后的原因。

合成组件

组件可以在它们的输出中引用其它组件。这使得我们可以使用同样的组件来抽象到任意层级。一个按钮,一个表单,一个对话框,一个屏幕:在 React 应用中,所有这些都通常描述为组件。

例如,我们可以创建一个 App 组件,并在其内部多次渲染 Welcome:


function Welcome(props) {
  return <h1>Hello, {props.name}</h1>
}

function App() {
  return (
    <div>
      <Welcome name="rookie-Sara" />
      <Welcome name="rookie-Cahal" />
      <Welcome name="rookie-Edite" />
    </div>
  )
}

 
ReactDOM.render(<App />, document.getElementById('root'))

通常,新的 React apps 都有一个单独的顶层 App 组件。然而,如果你在已有的应用中整合 React,你可以需要由下至上地, 从类似于 Button 这样的小组件开始, 逐渐整合到视图层的顶层。

提取组件

不要害怕把一个组件分为多个更小的组件。

举个例子,思考下名 Comment 组件:


function Comment(props) {
  return (
    <div className="Comment">
      <div className="UserInfo">
        <img className="Avatar" src={props.author.avatarUrl} alt={props.author.name} />
        <div className="UserInfo-name">{props.author.name}</div>
      </div>
      <div className="Comment-text">{props.text}</div>
      <div className="Comment-date">{fORMatDate(props.date)}</div>
    </div>
  )
}

它接受 author(一个对象),text(一个字符串)和 date(一个日期)作为 props。

这个组件修改起来很麻烦,因为它是被嵌套的,而且很难复用其中的某个部分。让我们从其中提取一些组件。

首先,提取头像 Avatar:


function Avatar(props) {
  return <img className="Avatar" src={props.user.avatarUrl} alt={props.user.name} />
}

Avatar 组件不用关心它在 Comment 中是如何渲染的。这是为什么我们它的 prop 一个更通用的属性名: user, 而不是 author 的原因。

我们建议从组件本身的角度来命名 props 而不是它被使用的上下文环境。

我们可以稍微简化一下 Comment 组件:


function Comment(props) {
  return (
    <div className="Comment">
      <div className="UserInfo">
        <Avatar user={props.author} />
        <div className="UserInfo-name">{props.author.name}</div>
      </div>
      <div className="Comment-text">{props.text}</div>
      <div className="Comment-date">{formatDate(props.date)}</div>
    </div>
  )
}

接下来,我们提取用户信息 UserInfo 组件, 用于将 Avatar 显示在用户名旁边:


function UserInfo(props) {
  return (
    <div className="UserInfo">
      <Avatar user={props.user} />
      <div className="UserInfo-name">{props.user.name}</div>
    </div>
  )
}

这使我们可以进一步简化 Comment 组件:


function Comment(props) {
  return (
    <div className="Comment">
      <UserInfo user={props.author} />
      <div className="Comment-text">{props.text}</div>
      <div className="Comment-date">{formatDate(props.date)}</div>
    </div>
  )
}

提取组件可能看起来是一个繁琐的工作,但是在大型的 Apps 中可以回报给我们的是大量的可复用组件。一个好的经验准则是如果你 UI 的一部分需要用多次 (Button,Panel,Avatar),或者本身足够复杂(App,FeedStory,Comment),最好的做法是使其成为可复用组件。

Props 是只读的

无论你用函数或类的方法来声明组件, 它都无法修改其自身 props. 思考下列 sum (求和)函数:


function sum(a, b) {
  return a + b
}

这种函数称为 “纯函数” ,因为它们不会试图改变它们的输入,并且对于同样的输入,始终可以得到相同的结果。

反之, 以下是非纯函数, 因为它改变了自身的输入值:


function withdraw(account, amount) {
  account.total -= amount
}

虽然 React 很灵活,但是它有一条严格的规则:

注意: 所有 React 组件都必须是纯函数,并禁止修改其自身 props 。
当然, 应用 UI 总是动态的,并且随时有可以改变。

如果我们想要动态改变 UI,那么就会涉及到我们上面说到的state(状态) 。我们通过动态的改变state来渲染整个页面,我们后面会提及,详情见 深入理解 setState

到此这篇关于React如何创建组件的文章就介绍到这了,更多相关React 创建组件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: React如何创建组件

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

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

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

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

下载Word文档
猜你喜欢
  • React如何创建组件
    目录前言 组件介绍创建类组件 关于 state 关于 render 创建函数组件 渲染组件 合成组件 提取组件 Props 是只读的 前言 这节我们将介绍 React 中组件的类别...
    99+
    2022-11-12
  • React如何创建对话框组件
    本篇内容主要讲解“React如何创建对话框组件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React如何创建对话框组件”吧!原生的前端体系创建一个对话框可是再简单不过了。但是如果放到组件化思想...
    99+
    2023-06-30
  • react创建组件有哪些方法
    这篇文章主要介绍了react创建组件有哪些方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。函数式组件:(1)语法:function myConponent(pro...
    99+
    2023-06-14
  • React创建组件的方式有哪些
    这篇文章主要介绍了React创建组件的方式有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。React推出后,出于不同的原因先后出现三种定...
    99+
    2022-10-19
  • React创建组件的的方式汇总
    目录1. 使用函数创建组件2. 使用类创建组件3. 抽离为独立JS文件1. 使用函数创建组件   函数组件:使用JS的函数(或箭头函数)创建的组件   约定1:函数名称必须以大写字母...
    99+
    2022-11-12
  • React组件与事件的创建使用教程
    目录创建组件函数组件类组件组件提取到单独的文件中有状态组件与无状态组件类组件的状态事件处理创建组件 函数组件 函数组件:使用JS的函数或者箭头函数创建的组件 使用 JS 的函数(或箭...
    99+
    2023-02-10
    React组件 React事件 React组件与事件
  • React高阶组件如何创建一个面包屑导航
    这篇文章主要介绍“React高阶组件如何创建一个面包屑导航”,在日常操作中,相信很多人在React高阶组件如何创建一个面包屑导航问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”React高阶组件如何创建一个面包...
    99+
    2023-07-04
  • 如何搭建react+ts组件库
    本篇内容介绍了“如何搭建react+ts组件库”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!整体需求react组件库,取名r-ui,能够导出...
    99+
    2023-06-30
  • vue如何创建组件
    这篇文章主要为大家展示了“vue如何创建组件”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue如何创建组件”这篇文章吧。方式:1、利用“Vue.extend”创建全局的vue组件,语法为...
    99+
    2023-06-29
  • 如何创建React Component
    小编给大家分享一下如何创建React Component,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!几种方法1.createC...
    99+
    2022-10-19
  • React创建对话框组件的方法实例
    原生的前端体系创建一个对话框可是再简单不过了。但是如果放到组件化思想下的react体系中,想要制作一个属于自己的对话框还是有一定的麻烦的。主要遇到的问题有两个:一是如何在子组件中创建...
    99+
    2022-11-13
  • React组件创建与事件绑定的实现方法
    目录1、组件创建方式方式一-函数创建组件方式二-使用类创建组件2、事件绑定方式一-类组件绑定事件方式二-函数组件绑定事件周末在家,练习React,记录下来,方便查看。 本期学习Rea...
    99+
    2022-12-26
    React组件创建 React事件绑定
  • React组件的创建与state同步异步详解
    目录组件的创建类组件函数式组件组件的嵌套组件的样式行内样式class样式事件处理事件绑定事件的参数传递ref的应用状态(state)定义statesetStatesetState同步...
    99+
    2023-03-14
    React组件的创建 React state同步异步
  • react组件的创建与更新实现流程详解
    目录React源码执行流程图legacyRenderSubtreeIntoContainerlegacyCreateRootFromDOMContainercreateLegacyR...
    99+
    2022-11-13
    react组件的创建与更新 react组件的创建 react组件的更新
  • vb控件数组如何创建
    在VB中,可以使用Array控件来创建控件数组。以下是一个示例:1. 首先,在窗体上放置一个控件,例如按钮(Button)。2. 选...
    99+
    2023-09-15
    vb
  • Vue组件如何创建使用
    这篇文章主要介绍“Vue组件如何创建使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue组件如何创建使用”文章能帮助大家解决问题。一、组件组件是vue的重要的特征之一,可以扩展html的功能,也...
    99+
    2023-07-05
  • 如何创建Vue.js中的单文件组件
    Vue.js作为一种著名的JavaScript框架,使开发人员能够轻松创建前端应用。 在Vue.js中,单文件组件至关重要,以便在组织和维护代码方面提高其效率。在本文中,我们将探讨如何创建Vue.js中的单文件组件。什么是单文件组件?Vue...
    99+
    2023-05-14
  • React组件的创建与state同步异步方法是什么
    这篇文章主要介绍“React组件的创建与state同步异步方法是什么”,在日常操作中,相信很多人在React组件的创建与state同步异步方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”React组件...
    99+
    2023-07-05
  • Angular如何根据组件名称动态创建组件
    这篇文章主要介绍Angular如何根据组件名称动态创建组件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、理解angular组件组件是一种特殊的指令,使用更简单的配置项来构建基于组...
    99+
    2022-10-19
  • React父组件如何调用子组件
    本篇内容介绍了“React父组件如何调用子组件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!调用方法:1、类组件中的调用可以利用React....
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作