react组件的两种方式:函数定义,类定义

在定义一个组件之前,首先要明白一点:react元素(jsx)是react组件的最基本的组成单位

组件要求:
1,为了和react元素进行区分,组件名字首必须大写
2、组件定以后,可以像jsx元素一样使用
 
首先要导入React 和 ReactDOM
import React from 'react';

第一种 函数定义一个组件:


import React from 'react';
function Ws(){
return <p>我是一个函数定义的组件</p>;
}
ReactDOM.render(<Ws/>,window.root);

定义 好的<Ws/>是<Ws></Ws>的简写 就是一个虚拟dom,是一个对象类型,里面包含定义组件时的一些值。

当使用函数定义好一个组件,使用ReactDOM.render函数将 (组件 :虚拟dom)转成真实的dom,并插入到页面。

第二中 使用类定义一个组件:

使用class定义组件的时候,首先要先从react中解构出React.Component,并继承它

import React {Component} from 'react';//解构React.Component
class He extends Component{ //继承Component,Component相当于React.Component 
render(){
return <div>我是class定义的一个组件</div>
}
}
 
当组件是一个类定义的时候,执行ReactDOM.render函数的原理:
1、首先找到组件对应的类,并new了这个类的一个实例
2、通过实例找到原型上的render函数,让render执行
3、ReactDOM.render接收到原型上render函数retrun的虚拟的dom
4、将虚拟dom转换成真实dom,插入到页面中
 
函数式组件是静态组件:和执行普通方法一样,调取一次组件,就把组件中的内容获取到,插入到页面中,如果不重复调取组件,显示的内容不会发生任何改变
 一般组件中的内容不会再次改变的情况下,会使用函数式组件
 
详解组件的运行机制:
create-element在处理的时候,遇到一个组件,返回的对象中:type就不在是字符串标签名了,而是一个函数(类),但是属性还是存在props中

rander渲染的时候,首先判断type的类型,如果是字符串就创建一个元素标签,如果是函数或者类,就把函数执行,把props中的每一项(包含children)传递给函数,在执行函数的时候,把函数中return的JSX通过create-element转换为新的对象,把这个对象返回,再通过render渲染方式,创建dom元素,插入到容器中

 调取组件的方法:
ReactDOM.render(
<div>
<Hes title='首页' style={{color:'red'}}/>,//单闭合 注意:这里的style是传递到组件后调用才能起到效果的
<Hes></He > //双闭合
</div> window.root);
import React from 'react';
function Hes(props){ //props变量存储的值是一个对象,没有传递是个空对象
let {title,style}=props; //结构传递的属性值
return <p style={style}>{title}</p>;//首页
}
这里注意是是:凡是以props传递的属性都是在组件中调用才能起到效果

单闭合和双闭合的区别

双闭合可以写子孙元素

 获取子组件:

React.Children.map(children){

return childern

}

React.Children有很多处理数组的方法

使用react定义组件的两种方式的更多相关文章

  1. React 中的 定义组件的 两种方式

    React 中创建 Components 的方式有两种:Function and Class 定义一个组件最简单的方法就是写一个 JavaScript 函数 function Welcome(prop ...

  2. react学习笔记1之声明组件的两种方式

    //定义组件有两种方式,函数和类 function Welcome(props) { return <h1>Hello, {props.name}</h1>; } class ...

  3. Spring定义Bean的两种方式:和@Bean

    前言:    Spring中最重要的概念IOC和AOP,实际围绕的就是Bean的生成与使用. 什么叫做Bean呢?我们可以理解成对象,每一个你想交给Spring去托管的对象都可以称之为Bean. 今天 ...

  4. react创建组件的几种方式及其区别

    react创建组件有如下几种方式 ①.函数式定义的无状态组件 ②.es5原生方式React.createClass定义的组件   ③.es6形式的extends React.Component定义的组 ...

  5. React创建组件的三种方式及其区别

    内容转载于http://www.cnblogs.com/wonyun/p/5930333.html React推出后,出于不同的原因先后出现三种定义react组件的方式,殊途同归; 具体的三种方式: ...

  6. 【iOS开发-图层】自己定义图层的两种方式

    想要自己定义图层,仅仅须要构建一个类继承CALayer方法 假设让自己定义图层初始化上面就有画好的图形.有两种办法 重写drawInContext方法 自己定义的图层以下的方法.然后必须自己定义的图层 ...

  7. React创建组件的三种方式比较

    推荐文章: https://www.cnblogs.com/wonyun/p/5930333.html 创建组件的方式主要有: 1.function 方式 2.class App extends Re ...

  8. React创建组件的三种方式比较和入门实例

    推荐文章: https://www.cnblogs.com/wonyun/p/5930333.html 创建组件的方式主要有: 1.function 方式 2.class App extends Re ...

  9. React事件方法、React定义方法的几种方式、获取数据、改变数据、执行方法传值

    1.案例实现代码如下 import React, { Component } from 'react'; /** * 特别注意this,对于传值和绑定都十分重要 */ class Home4 exte ...

随机推荐

  1. C#3.0新增功能04 扩展方法

    连载目录    [已更新最新开发文章,点击查看详细] 扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型 ...

  2. <<Modern CMake>> 翻译 1. CMake 介绍

    <<Modern CMake>> 翻译 1. CMake 介绍 人们喜欢讨厌构建系统. 仅仅观看 CppCon17 上的演讲,就可以看到开发人员因为构建系统而闹笑话的例子. 这 ...

  3. Http接口调用示例教程

    介绍HttpClient库的使用前,先介绍jdk里HttpURLConnection,因为HttpClient是开源的第三方库,使用方便,不过jdk里的都是比较基本的,有时候没有HttpClient的 ...

  4. Java面试题-基础篇三(干货)

    这些JAVA基础题确定都会了吗? 31.String s = new String("xyz");创建了几个StringObject?是否可以继承String类? 两个或一个都有可 ...

  5. asn1 学习笔记

    语法 定义 Name ::= type 定义一个名称为“Name”的元素 它是一个给定ASN.1类型“Type”的实例 MyName ::= IA5String //IA5String(类似于ASCI ...

  6. Centos7 安装Homestead环境2

    历史命令, -- :: cd /etc/yum.repos.d/ -- :: wget http://download.virtualbox.org/virtualbox/rpm/rhel/virtu ...

  7. 基于kubernetes自研容器管理平台的技术实践

    一.容器云的背景 伴随着微服务的架构的普及,结合开源的Dubbo和Spring Cloud等微服务框架,宜信内部很多业务线逐渐了从原来的单体架构逐渐转移到微服务架构.应用从有状态到无状态,具体来说将业 ...

  8. abp(net core)+easyui+efcore实现仓储管理系统——使用 WEBAPI实现CURD (十一)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

  9. 14. 流、文件和IO

    前言 InputStream/OutStream流用来处理设备之间的数据传输 Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持 ...

  10. 1.4.2python网站地图爬虫(每天一更)

    # -*- coding: utf-8 -*- ''' Created on 2019年5月6日 @author: 薛卫卫 ''' import urllib.request import re de ...