React 入门第三步:了解组件的概念及应用

[[419758]]

组件允许你将 UI 拆分为独立可复用的代码片段,并对每个片段进行独立构思。从概念上类似于 JavaScript 函数。

它接受任意的入参(即 “props”),并返回用于描述页面展示内容的 React 元素。分为函数组件与 class 类组件。

学习组件之前,可以先安装一个 VS Code 插件,直接搜索 react , 选择下载量最高的就行了。

函数组件与类组件

顾名思义,函数组件就是使用函数创建的组件,类组件就是使用类创建组件,安装好插件之后,可以直接使用简写补全功能创建对应插件。

注意,首字母要大写。

函数组件的创建

编辑器快捷方式:rfce

 
 
 
 
  1. import React from'react' 
  2.  
  3. functionComponentFun() { 
  4.   return ( 
  5.     <div> 
  6.       <h2>单文件函数组件</h2> 
  7.     </div> 
  8.   ) 
  9.  
  10. exportdefault ComponentFun 

声明函数,并在函数中返回 JSX ,最后导出函数。

类组件的创建

编辑器快捷方式:rce

 
 
 
 
  1. import React, { Component } from'react' 
  2.  
  3. exportclass ComponentClass extends Component { 
  4.   render() { 
  5.     return ( 
  6.       <div> 
  7.         <h2>单文件类组件</h2> 
  8.       </div> 
  9.     ) 
  10.   } 
  11.  
  12. exportdefault ComponentClass 

类组件需要继承 Component,因此需要进行导入。如果不导入,则需要继承React.Component。

同时,类中需要调用 render() 渲染函数,在渲染函数中,return 返回对应的 JSX。

组件的引入与使用

组件的使用也很简单,按模块化语法引入之后,直接当作标签在 JSX 中使用。

 
 
 
 
  1. import React from'react' 
  2. // 引入单文件组件 
  3. import ComponentClass from'./ComponentClass' 
  4. import ComponentFun from'./ComponentFun' 
  5.  
  6.  
  7. functionApp() { 
  8.   return ( 
  9.     <div> 
  10.       {/* 使用组件 */} 
  11.       <ComponentClass/> 
  12.       <ComponentFun/> 
  13.     </div> 
  14.   ) 
  15.  
  16. exportdefault App 

因为 JSX 必须有一个根节点,因此在引入使用后,渲染的结果中,会出现多个 div 嵌套,比如下面这样子的:

    
  
  
  
  1. <divid="root"><div><div><h2>单文件类组件</h2></div><div><h2>单文件函数组件</h2></div></div></div> 

为了解决这个问题,React 提供了 “片段” 组件 Fragment ,它允许你将子列表分组,渲染后不会向 DOM 添加额外节点:

 
 
 
 
  1. import React, { Component,Fragment } from'react' 
  2.  
  3. exportclass ComponentClass extends Component { 
  4.   render() { 
  5.     return ( 
  6.       <Fragment> 
  7.         <h2>单文件类组件</h2> 
  8.       </Fragment> 
  9.     ) 
  10.   } 
  11.  
  12. exportdefault ComponentClass 

使用也很简单,就是引入后,将 JSX 中的div 根节点替换即可,最终渲染后的 DOM 如下:

 
 
 
 
  1. <divid="root"><div><h2>单文件类组件</h2><h2>单文件函数组件</h2></div></div> 

 

THE END