react的组件的两种形式

1.如果需要传参,在函数中加一个props参数来接受,并且必须向外return一个合法的jsx创建的虚拟DOM。

//1. 组件名首字母为大写 2. 必须return 合法的jsx
// 这里就可以相当于子组件
function Hellow (props){
//props为父组件传过来的数据
//如果打印props的话,只要子组件用的到东西都会打印出来,在这里没有用到父组件中的a数据,因此只会打印出前三个来。
return <div>
姓名: {props.name}, 性别: {props.sex}, 年龄: {props.age}
</div>
}
// 这里就想当于父组件
const person = {
name: ‘zs‘,
sex: ‘gener‘,
age: 12,
a: 2
}
//将组件渲染到页面上来
// 有两个参数分别为,1.填写组件,2. 将组件渲染到指定的位置,也就是指定的DOM元素上。
ReactDOM.render(<div>
//1. 使用ES6的展开运算符
<Hellow {...person}/>
//2. 直接赋值
<Hellow name=‘zs‘ sex=‘gener‘ age={12}/>
//3. 使用`.`的形式,父组件
<Hellow name={person.name} sex={person.sex} age={person.age}/>
</div>document.getElementById(‘app‘))

2. 使用class关键字来创建组件

这种方法也是最常用的一种方式

最基本的创建组件结构

class World extends React.Component{ render(){ return<div>这是一个组件</div> } }

例如:

// 父组件
// 创建组件和虚拟DOM
import React from ‘react‘
//实现虚拟DOM操作并且渲染到页面指定的容器中
import ReactDOM from ‘react-dom‘
//1. 创建参数,给子组件使用
const person = {
name: ‘zs‘,
sex: ‘gener‘,
age: 23
}
//2. 导入子组件
import World from ‘./Component/World‘
//3. 渲染到页面上
ReactDOM.render(
<div><World {...person}/></div>, document.getElementById(‘app‘)
)

//子组件
export default class World extends ReactDOM.Component{
constructor(props){
// 父类构造函数的引用
super(props)
// this.state是当前class组件私有数据
this.state= {
msg: ‘zs‘,
info: ‘hellow‘
}
}
//render是一个生命周期中的函数
render(){
return <div>
{this.state.msg},
{this.props.name}
</div>
}
}

  1. 构造函数创建的组件没有状态
  2. class创建的组件有状态
  3. 两种组件的本质的区别为state属性

原文地址:https://www.cnblogs.com/zhouyideboke/p/12574553.html

时间: 2024-10-30 01:50:04

react的组件的两种形式的相关文章

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

//定义组件有两种方式,函数和类 function Welcome(props) { return <h1>Hello, {props.name}</h1>; } class Welcome extends React.Component{ render(){ return <h1>Hello, {this.props.name}</h1>; } } ReactDOM.render( <Welcome name="kevin"/&g

爬虫学习 17.基于scrapy-redis两种形式的分布式爬虫

爬虫学习 17.基于scrapy-redis两种形式的分布式爬虫 redis分布式部署 1.scrapy框架是否可以自己实现分布式? - 不可以.原因有二. 其一:因为多台机器上部署的scrapy会各自拥有各自的调度器,这样就使得多台机器无法分配start_urls列表中的url.(多台机器无法共享同一个调度器) 其二:多台机器爬取到的数据无法通过同一个管道对数据进行统一的数据持久出存储.(多台机器无法共享同一个管道) 2.基于scrapy-redis组件的分布式爬虫 ? - scrapy-re

MyBatis collection的两种形式——MyBatis学习笔记之九

与association一样,collection元素也有两种形式,现介绍如下: 一.嵌套的resultMap 实际上以前的示例使用的就是这种方法,今天介绍它的另一种写法.还是以教师映射为例,修改映射文件TeacherMapper.xml如下(点击此处进入嵌套resultMap形式的示例源码下载页面.注:本示例代码是在修改本系列的上篇博文示例代码的基础上完成的,用到了MapperScannerConfigurer和注解等知识.对这些知识不熟悉的读者,可参考上篇博文:http://legend20

include的两种形式与介绍

include的另种形式和区别先简单的说下include的两种形式:<% include file="" %>:为静态包含(加载)<jsp:include page="" flush="true" />:为动态包含(加载) 简单来解释一下静态包含和和动态包含:静态包含:JSP编译器编译的时候已经包含好相应的文件,生成一个java_servlet,对应的Servlet文件中已经包含了被包含的页面,然后javac编译成一个cl

C# 支持两种形式的字符串:规则字符串和逐字字符串(@字符串)

规则字符串由包含在双引号中的零个或多个字符组成(如 "hello"),并且可以包含简单转义序列(如表示制表符的 \t).十六进制转义序列和 Unicode 转义序列. 逐字字符串由 @ 字符后跟开始的双引号字符.零个或多个字符以及结束的双引号字符组成.一个简单的示例就是 @"hello".在逐字字符串中,分隔符之间的字符逐字解释,唯一的例外是"引号转义序列".具体说来,在逐字字符串中不处理简单转义序列以及十六进制 和 Unicode 转义序列.逐

爪哇国新游记之十二----线程创建的两种形式

public class Thread1 extends Thread{ public void run(){ int i=0; while(i<10){ i++; System.out.println(i); } } public static void main(String[] args){ Thread1 t=new Thread1(); t.start(); } } public class Thread2 implements Runnable{ @Override public v

C++:一般情况下,设计函数的形参只需要两种形式

C++:一般情况下,设计函数的形参只需要两种形式.一,是引用形参,例如 void function (int &p_para):二,是常量引用形参,例如 void function(const int &p_para). 它们的特点如下: # 引用形参适用于需要改变变量数据的情况,常量引用形参适用于不需要改变对象.变量数据的情况. # 引用形参需要对象.变量来传递值,常量引用形参则不需要,可以直接传递表达式或者函数返回值. 通过这两种方式可以涵盖所有可能需要的设计情况,而通过这种方式实现的

重连通量的邻接矩阵和邻接表两种形式的求法

邻接矩阵: #include <cstdio> #include <cstring> #include <stack> using namespace std; #define min(a,b) a<b?a:b #define N 105 int dfn[N],low[N],mat[N][N],visit[N],tmpdfn,n; struct Edge{ int x,y; void print(){ printf("%d-%d\n",x,y)

SQL关于apply的两种形式cross apply和outer apply(转载)

SQL 关于apply的两种形式cross apply 和 outer apply apply有两种形式: cross apply 和 outer apply 先看看语法: <left_table_expression>  {cross|outer} apply <right_table_expression> 再让我们了解一下apply运算涉及的两个步骤: A1:把右表表达式(<right_table_expression>)应用到左表(<left_table_