上期回顾

  • 前文我们讲解了 React 模板 JSX,接着我们继续来看看 React 组件又是如何工作的呢?

  • 组件化开发到了今天已经是大家的共识,在 React 中,组件同样也是组成我们整个项目的基本单元。

react 中组件可以将UI切分成一些的独立的、可复用的部件。组件的返回值是一个需要在也页面上显示的 React 元素,也就是说 React 中组件必须有返回值。示例如下:

function Hello (props){

return (<div>

<h1>Hello world</h1>

</div);

}

整个 Hello 就是一个组件,调用的时候,我们 可以直接 调用 <Hello /> 就可以,另外这里要注意,组件的命名必须是首字母大写。

创建组件

在 React 中创建组件有三种方式:

1) 无状态的函数式组件;

2) 基于ES5 的 React.createClass;

3) 基于 ES6 的 extends React.Component;

这三种方式都可以去创建一个 React 组件,但是在实际的使用过程中有什么不同呢?我们具体来看。

函数式组件

函数式组件,是为了创建纯粹的展示组件,也就是说函数式组件一旦创建了就不能修改,除非它的父级修改了才会引起它的修改,这样的好处就是性能较高,内部没有太多的东西,如 state 和 声明周期,当然生命周期和state是什么我们后边再详细说,这里我们先大概了解,这俩东西主要是用来更改组件的内容,以及组件修改后的一系列处理的。

函数式组件的编写方式如下:

function Hello (props[,context]){

return (<div>

<h1>Hello {props.name}</h1>

</div);

}

ReactDOM.render(<Hello name="MiaoV" />, node)

return 中就是我们要显示在页面上的内容,props 是父组件传入的信息,context 是父祖中传入的信息,关于这两项的具体内容我们也放在下篇内容中详细的讲解。

除了上述内容之外,函数式组件还有以下几个特征:

  1. 组件不会被实例化,而是直接解析成 reactElemnt,整体渲染性能得到提升

  2. 没有实例化,自然在组件内部我们也不能使用 this

  3. 组件无法访问生命周期的方法,这个我们已经介绍过

  4. 组件没有state,只能访问 props

函数式组件由于其优良的性能,个人建议如果一个组件的内部我们不需要控制它进行改变的话,尽量还是使用 函数式组件

React.createClass

React.createClass 是一种基于 ES5 的创建组件的方式。本质就是一个工厂,在 React.createClass(配置对象) 放入我们的配置对象,然后它会帮我们返回一个 React 组件,

示例如下:

let Fn = React.createClass({

render: function(){

return (

<div>

<h1 id="title">Hello React!</h1>

<h2 id={title}>Hello React!</h2>

<h2 className="box">class属性</h2>

<h2 style={ {background: 'red'} }>style属性</h2>

</div>

);

}

});

上述是 React.createClass 的使用方式,但是要注意 React.createClass 方法 在React 16 之后就已经取消了,所以我们就不再讨论这个方法,直接来看 ES6 的写法。

React.Component

React ES6中,如果要声明一个类式组件,我们需要从 React.Component 继承过来,具体写法如下:

class Hello extends React.Component {

render(){

return (

<h1>hello! {this.props.name}</h1>

);

}

}

ReactDOM.render(

<Hello name = "MiaoV" />

document.querySelector('#app')

);

在使用 React.Component 的时候,有一些问题是需要我们注意的:

  • 在 React.Component 中我们必须要定义一个 render 方法,这个方法中的返回值,就是最终我们要渲染到页面中 ReactElement 。

  • 组件在实际调用的时候,会生成一个实例化对象,所以组件的方法中的 this 就指向这个实例化对象。

  • props 这个属性中存储的是我们调用时传入的属性,也是默认的第0个参数,所以组件中如果定义了 constructor, 必须 使用 super 继承,另外必须 把第 0 个参数传入去,示例如下:

  • 最后强调一下,组件的命名必须首字母大写。

class Hello extends React.Component {

constructor(props){

super(props);

}

render(){

return (

<h1>hello! {this.props.name}</h1>

);

}

}

关于组件的创建我们就先介绍到这,在下一篇中,我们会详细的讲解 props,state 以及组件其他的相关知识。

——以上是笔者归纳总结,如有误之处,欢迎指出。

订阅号ID:Miaovclass

关注妙味订阅号:“妙味前端”,为您带来优质前端技术干货;

玩转 React 【第03期】:邂逅 React 组件的更多相关文章

  1. Webpack + React 开发 03 props

    React中组件的用法与原生的 HTML 标签完全一致,可以任意加入属性,比如 <HelloWorld name="John"> ,就是 HelloWorld 组件加入 ...

  2. 【React】354- 一文吃透 React 事件机制原理

    大纲 主要分为4大块儿,主要是结合源码对 react事件机制的原理 进行分析,希望可以让你对 react事件机制有更清晰的认识和理解. 当然肯定会存在一些表述不清或者理解不够标准的地方,还请各位大神. ...

  3. 《HelloGitHub月刊》第03期

    <HelloGithub>第03期 兴趣是最好的老师,而<HelloGitHub> 就是帮你找到兴趣! 因为我比较熟悉python语言,所以月刊中python语言的项目居多,个 ...

  4. React Canvas:高性能渲染 React 组

    React Canvas 提供了使用 Canvas 渲染移动 Web App 界面的能力,替代传统的 DOM 渲染,具有更接近 Native App 的使用体验.React Canvas 提供了一组标 ...

  5. React学习(一)父子组件通讯

    React父子组件之间通讯,利用props和state完成,首先React是单向数据流,父组件可以向子组件传递props: 实现父子组件双向数据流整体的思路是: 1,父组件可以向子组件传递props, ...

  6. 【每天半小时学框架】——React.js的模板语法与组件概念

           [重点提前说:组件化与虚拟DOM是React.js的核心理念!]        先抛出一个论题:在React.js中,JSX语法提倡将 HTML 和 CSS 全都写入到JavaScrip ...

  7. React 深入系列1:React 中的元素、组件、实例和节点

    文:徐超,<React进阶之路>作者 授权发布,转载请注明作者及出处 React 深入系列,深入讲解了React中的重点概念.特性和模式等,旨在帮助大家加深对React的理解,以及在项目中 ...

  8. React Native入门教程2 -- 基本组件使用及样式

    在上一篇文章中,我们学会了如何搭建React Native的环境(React Native入门教程(笔记) 1 – 开发环境搭建),不知道你们是否搭建好了呢,如果还没有,那么快动起小手,来体验RN带给 ...

  9. react实战项目开发(2) react几个重要概念以及JSX语法

    前言 前面我们已经学习了利用官方脚手架搭建一套可以应用在生产环境下的React开发环境.那么今天这篇文章主要先了解几个react重要的概念,以及讲解本文的重要知识JSX语法 React重要概念 [思想 ...

  10. 《HelloGitHub月刊》第 03 期

    <HelloGithub>第03期 兴趣是最好的老师,而<HelloGitHub> 就是帮你找到兴趣! 因为我比较熟悉python语言,所以月刊中python语言的项目居多,个 ...

随机推荐

  1. S-Nim HDU - 1536

    #include<iostream> #include<cstdio> #include<cstring> #include<vector> using ...

  2. Redis之下载安装及基本使用

    redis window系统的redis是微软团队根据官方的linux版本高仿的 官方原版: https://redis.io/ 中文官网:http://www.redis.cn 1.1 redis下 ...

  3. 代码版本控制[version control]之Git

    如何多人协同开发同一个项目? 使用代码版本控制[version control]软件, 目前市面上比较流行的代码版本控制器有: git,svn,csv 1. 使用git管理代码版本 本项目使用git管 ...

  4. 378. Kth Smallest Element in a Sorted Matrix(java,优先队列)

    题目: Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the ...

  5. 『C++』基础知识点

    一.基础知识 1.C++编译流程 以Unix系统编译中间文件为说明: .cpp—(编译预处理)—>.ii—(编译)—>.s—(汇编)—>.o—(ld,连接)—>.out 2.# ...

  6. win10下使用python访问vmbox中的redis

    了解到redis没有windows的官方支持,所以在vmbox中的ubuntu装了redis#在ubuntu中 #搜索redis相关软件信息 apt-cache search ^redis #不清楚为 ...

  7. noip2013转圈游戏

    题目描述 n个小伙伴(编号从 0到 n−1)围坐一圈玩游戏.按照顺时针方向给 n个位置编号,从0 到 n−1.最初,第 0号小伙伴在第 0号位置,第 1号小伙伴在第 1 号位置,……,依此类推. 游戏 ...

  8. RocketMQ安装教程

    1.下载 http://mirror.bit.edu.cn/apache/rocketmq/ 2.安装 .tar.gz cd alibaba-rocketmq/bin chmod u+x * 3.配置 ...

  9. vmware自定义网段

    vmware会自动随机给分配192.168下的一个C段作为虚拟网卡(如VMnet8)的网段. 有时我们可能不想使用随机分配的网段而想使用指定网段 注意:配置成新网段后VMware会认为所有IP都没分配 ...

  10. win7 忘记密码

    你可以找个PE来修改密码,用光盘或U盘做PE都行,现在很多PE都支持密码修改的!不过下面这个方法还是要用到PE:1. 进入pe2.进入c:\windows\system32下 更改magnify.ex ...