前边的ReactJS基础,我们可以了解到,对于React,可以说是万物皆组件

React的组件应该具有 可组合(Composeable)可重用(Reusable)可维护(Maintainable)的特征,所以我们尽量将组件最小化,写的尽可能的小

前边已经介绍了组件的写法,下面我们来进一步了解一下组件的属性、状态、生命周期和嵌套

组件的属性

我们来编写一个组件SayHello,有一个name属性,然后输出hello + name的值,代码如下:

var SayHello = React.createClass({
render:function(){
return <h1 style={{color:"red"}}>hello {this.props.name}</h1>
}
}); ReactDOM.render(
<SayHello name="lyx" />,
document.getElementById('great')
)

结果

有些细节需要注意:

1.创建的组件名称首字母必须大写。
2.<SayHello name="lyx" />与 document.getElementById('great')之间用的是逗号分隔

3.获取属性的值用的是 this.props.属性名

4.组件的style属性的设置方式也值得注意,要写成style={{width:“”100"}}这种形式

 组件的状态

组件免不了要与用户互动,React 的一大创新,就是将组件看成是一个状态机,一开始有一个初始状态,然后用户互动,导致状态变化,从而触发重新渲染 UI 。我们来看代码

var Counter = React.createClass({
getInitialState: function () {
return { clickCount: 0 };
},
handleClick: function () {
this.setState(function(state) {
return {clickCount: state.clickCount + 1};
});
},
render: function () {
return (<h2 onClick={this.handleClick}>点我!点击次数为: {this.state.clickCount}</h2>);
}
});

上面代码实现的是点击h2,显示点击次数,效果如图所示

需要注意是的是

1.getInitialState函数必须有返回值,可以是NULL或者一个对象。

2.访问state的方法是this.state.属性名。

3.变量用 { }包裹,不需要再加双引号。

组件的嵌套

前边我们说了,组件要有复用的特点,线面来看一下如何复用

来看下边的代码

var Form= React.createClass({
render:function(){
return <div>
{this.props.inputName}:<input type="text"/> </div>
}
});
var Iname= React.createClass({
render : function(){
return <div>
<h3>欢迎</h3>
<Form inputName="姓名"/>
<Form inputName="电话"/>
<button>submit</button>
</div>
}
});
ReactDOM.render(
<Iname />,
document.getElementById('sub')
)

这里我们创建了一个Form组件,然后又创建了一个Iname组件,然后我们在Inmae组件中调用Form组件两次,这里我们通过属性inputName传入值

组件生命周期

组件的生命周期可分成三个状态:

  • Mounting:已插入真实 DOM
  • Updating:正在被重新渲染
  • Unmounting:已移出真实 DOM

生命周期的方法有:

componentWillMount 在渲染前调用,在客户端也在服务端。

componentDidMount : 在第一次渲染后调用,只在客户端。之后组件已经生成了对应的DOM结构,可以通过this.getDOMNode()来进行访问。 如果你想和其他JavaScript框架一起使用,可以在这个方法中调用setTimeout, setInterval或者发送AJAX请求等操作(防止异部操作阻塞UI)。

componentWillReceiveProps 在组件接收到一个新的prop时被调用。这个方法在初始化render时不会被调用。

shouldComponentUpdate 返回一个布尔值。在组件接收到新的props或者state时被调用。在初始化时或者使用forceUpdate时不被调用。
可以在你确认不需要更新组件时使用。

componentWillUpdate在组件接收到新的props或者state但还没有render时被调用。在初始化时不会被调用。

componentDidUpdate 在组件完成更新后立即调用。在初始化时不会被调用。

componentWillUnmount在组件从 DOM 中移除的时候立刻被调用。

这些就跟PHP中的一些魔术方法一样,满足条件自动调用,

下面以componentDidMount方法为例,

var Hello = React.createClass({
getInitialState: function () {
return {
color: "red"
};
}, componentDidMount: function () { alert("111"); }, render: function () {
return (
<div style={{color: this.state.color}}>
Hello {this.props.name}
</div>
);
}
});

此方法是第一次渲染后调用,就有如下结果

ReactJS基础(续)的更多相关文章

  1. ReactJS基础视频教程

    React是什么?React.js 是 Facebook 推出的一个用来构建用户界面的 JavaScript 库.Facebook开源了React,这是该公司用于构建反应式图形界面的JavaScrip ...

  2. 2.ReactJS基础(虚拟DOM,JSX语法)

    将脚手架(create-react-app)创建的todolist项目精简为hello world示例 即,删除自动生成的样式文件.logo.svt.App.test.js.serviceWorker ...

  3. 【JavaScript】ReactJS基础

    初探React,将我们的View标签化 前言 我之前喜欢玩一款游戏:全民飞机大战,而且有点痴迷其中,如果你想站在游戏的第一阶梯,便需要不断的练技术练装备,但是腾讯的游戏一般而言是有点恶心的,他会不断的 ...

  4. 【T_SQL】 基础 续+++

    十五.T-SQL 编程 1.变量 (1)局部变量                    A.局部变量必须以标记@作为前缀 ,如@age.                    B.局部变量的使用也是先 ...

  5. 【T_SQL】基础 续+

    十.模糊查询 1.LIKE --查询时,字段中的内容并不一定与查询内容完全匹配,只要字段中含有这些内容. SELECT StuName AS 姓名 FROM Stuinfo WHERE stuname ...

  6. jQuery基础知识--Form基础(续)

    下拉框应用 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF ...

  7. 1. ReactJS基础(开发环境搭建)

    本文主要介绍通过React官方提供的create-react-app脚手架进行开发环境的搭建. 1.安装node环境(安装过程这里不做介绍,可参考其他博文) 在cmd中输入node -v 如果可以看到 ...

  8. reactJs 基础

    react不是一个完整的mvc,mvvm框架. react跟web components 不冲突  背景原理:基于React进行开发时所有的DOM构造都是通过虚拟DOM进行,每当数据变化时,React ...

  9. Django 之基础续

    1.路由系统之动态路由 前言:还记得之前的分页效果,这个如何实现呢?答案就是动态路由. url(r'^detail/(\d+)/$', views.detail), url(r'^detail2/(\ ...

随机推荐

  1. 【 js 基础 】【 源码学习 】 setTimeout(fn, 0) 的作用

    在 zepto 源码中,$.fn 对象 有个 ready 函数,其中有这样一句 setTimeout(fn,0); $.fn = { ready: function(callback){ // don ...

  2. C/s从文件(TXT)中读取数据插入数据库

    流程: 1.当按钮单击时,弹出OpenFileDialog 2.判断后缀名是否合法 3.导入数据库 按钮事件中的代码: 1.判断用户是否选中文件. 2.判断用户选择的文件是否为txt //第一步,当按 ...

  3. Spring Cloud 声明式服务调用 Feign

    一.简介 在上一篇中,我们介绍注册中心Eureka,但是没有服务注册和服务调用,服务注册和服务调用本来应该在上一章就应该给出例子的,但是我觉得还是和Feign一起讲比较好,因为在实际项目中,都是使用声 ...

  4. 【Python 函数对象 命名空间与作用域 闭包函数 装饰器 迭代器 内置函数】

    一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(Firs ...

  5. 009一对一 主键关联映射_单向(one-to-one)

    009一对一  主键关联映射_单向(one-to-one) ²  两个对象之间是一对一的关系,如Person-IdCard(人—身份证号) ²  有两种策略可以实现一对一的关联映射 主键关联:即让两个 ...

  6. kafka 0.10.2 消息生产者

    package cn.xiaojf.kafka.producer; import org.apache.kafka.clients.producer.KafkaProducer; import org ...

  7. 【JAVAEE学习笔记】hibernate03:多表操作详解、级联、关系维护和练习:添加联系人

    一.一对多|多对一 1.关系表达 表中的表达 实体中的表达 orm元数据中表达 一对多 <!-- 集合,一对多关系,在配置文件中配置 --> <!-- name属性:集合属性名 co ...

  8. 浅谈Fastfds+nginx结合_单机

    一.环境 centos6.8 x64  IP:192.168.134.128 所需软件包: libfastcommon-1.0.7.zip,FastDFS_v5.05.tar.gz,nginx-1.7 ...

  9. Vulkan Tutorial 11 Shader modules

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 与之前的图像API不同,Vulkan中的着色器代码必须以二进制字节码的格式使用,而不 ...

  10. BOM(2)

    Window 子对象 (1)Location 对象 Location 对象包含有关当前 URL(统一资源定位符) 的信息.(Uniform Resource Location) Location 对象 ...