React学习笔记一
我是通过script src的方式引入的react的相关文件,本次学习顺序按照《React快速上手开发》一书的顺序学习的,
本篇博客笔记地址:http://note.youdao.com/noteshare?id=09c72e73de42ff99a65977eaf4db892e&sub=60C0A66521F9494DA5A784A2A6E9877E
一、通过script src的方式引入所需的js文件
1、引入react.js和reactDom.js
2、使用ReactDom对象,这个对象包含几个方法,其中render()方法是最有用的。
注意:React.DOM和ReactDOM的区别:
React.DOM----预定义好的HTML元素集合
ReactDOM----在浏览器中渲染应用的一种途径
ReactDOM.render(
React.DOM.h1(null,"Hello World"),
document.getElementById("app")
)
h1()方法的首个参数接收一个对象,第二个参数接收的是定义了该组件的子元素
二、特殊的DOM属性----class,for,style
class,for是JavaScript中的关键字,取而代之的属性名是className和htmlFor
ReactDOM.render(
React.DOM.h1({
style:{
color:'#fff',
background:'red',
height:'50px',
lineHeight:'50px'
},
className:'appa',
htmlFor:'me'
},"Hello World"),
document.getElementById("app")
)
问题:为什么在ReactDOM.render中不能再次渲染和h1标签同级的DOM元素?
三、组件生命周期
1、基础
①创建组件的方法
var component = React.createClass({
render(){
return React.DOM.div({
style:{
fontSize:'14px',
fontFamily:'微软雅黑',
lineHeight:'30px'
},
className:'my-component'
},React.DOM.span(null,'这是我的第一个组件'))
}
}) ReactDOM.render(
React.createElement(component),
document.getElementById('app')
)
②创建组件的方法
ReactDOM.render(
React.createElement('span',{
style:{
color:'blue',
fontSize:"16px",
fontFamily:'微软雅黑',
fontWeight:'bold',
}
},'this is my component'),
document.getElementById('app')
)
③创建组件的方法
var ComponentFactory = React.createFactory(component)
ReactDOM.render(
ComponentFactory(),
document.getElementById('app')
)
2、属性
所有的属性都可以通过this.props对象来获取;this.props可视为只读属性,在这一点上,和Vue的父组件传值给子组件相似.
var component = React.createClass(
{
render(){
return React.DOM.p({
style:{
color:"#333",
fontSize:'16px',
lineHeight:'40px'
},
},"My name is"+this.props.name)
}
}
)
ReactDOM.render(
React.createElement(component,{
name:'Alice'
}),
document.getElementById('app')
)
3、propTypes
在组件中可添加proptypes的属性,以声明组件需要接收的属性列表及其对应类型。类似于Vue组件中的data,但又不太像data
使用propsTypes的好处:
- 通过预先声明组件期望接收的参数,让使用组件的用户不需要在render()方法的源代码中到处寻找该组件可配置的属性
- React 会在运行时验证属性值的有效性,这使得我们可以放心的编写render函数,而不需要对组件接收的数据类型有所顾虑
3、下图是输出React.PropTypes的值
/*propTypes的基本使用*/
var component = React.createClass({
propTypes:{
name:React.PropTypes.string.isRequired,
user:React.PropTypes.any.isRequired
},
render(){
return React.DOM.div({},'my name is '+this.props.name+',I love '+this.props.user)
}
}) ReactDOM.render(
React.createElement(component,{
name:123,
user:'FangH'
}),
document.getElementById('app')
)
注意:
①当组件中需要的参数未传入时,会出现以下情况
页面渲染显示undefined,同时页面会报警告,意思是name没有在构造函数中规定
②组件中需要的是字符串类型,但是构造函数中传的是其他类型时
页面渲染时仍会将传入的值渲染出来,但是在控制台上会报警告,意思是传入的类型不是构造函数中规定的字符串类型
默认属性值--getDefaultProps函数的使用
①何时使用:在定义一些可传可不传的属性时,为了组件在这些情况下正常运行,要特别注意一些防御性样板代码的产生(例如一些是否存在的三元判断),这时可以通过这个函数避免这种情况的产生,是我们将关注点放在更重要的地方
②作用:getDefaultProps这个函数返回的是一个对象,并为每一个可选的属性提供了一个默认值
/*默认属性的使用*/
var component = React.createClass({
propTypes:{
name:React.PropTypes.string.isRequired,
age:React.PropTypes.number,
address:React.PropTypes.string
},
getDefaultProps(){
return {
age:0,
address:'n/a'
}
}, render(){
return React.DOM.div({},'my name is '+this.props.name+',I am '+this.props.age+' years old,I live in '+this.props.address)
}
}) ReactDOM.render(
React.createElement(component,{
name:'FangH',
age:26,
// address:
}),
document.getElementById('app')
)
4、state
React真正的闪光点出现在应用数据发生改变的时候(也就是传统浏览器DOM操作和维护变得复杂的地方)
React有一个成为state的概念,也就是自建渲染自身使用到的数据。当state发生改变时,React会自动重建用户界面。
当我们在render()函数中初始化构造界面后,只需要关注数据的变化即可。
调用setState()后的界面更新是通过一个队列机制搞笑进行批量修改的,直接改变this.state会导致意外行为发生,
可以把this.state当作只读属性。不要自行调用render()方法--而是将其留给React进行批量处理,计算最小的变化数量,并在合适的实际调用render()
可以通过this.state对象获取state,在更新state时,可以使用this.setState()的方法。当this.setState()被调用时,React会调用你的render()方法并更新页面
注意:当setState()被调用时,React会更新页面,这是最常见的情形。
React学习笔记一的更多相关文章
- react学习笔记1--基础知识
什么是react A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES[React是一个用于构建用户界面的JavaScript库.] React之所以快, ...
- React学习笔记--程序调试
React学习笔记 二 程序调试 前面我们搭建好了React的基本开发环境,可以编写基本的React js程序了.但完成的开发环境肯定包含调试器,怎么调试用React编写的JS程序呢?有浏览器,比 ...
- React学习笔记(一)- 入门笔记
React入门指南 作者:狐狸家的鱼 本文链接:React学习笔记 GitHub:sueRimn 1.组件内部状态state的修改 修改组件的每个状态,组件的render()方法都会再次运行.这样就可 ...
- React学习笔记(七)条件渲染
React学习笔记(七) 六.条件渲染 使用if或条件运算符来创建表示当前状态的元素. 可以使用变量来存储元素.比如: let button = null; if (isLoggedIn) { but ...
- React学习笔记(六)事件处理
React学习笔记(六) 五.事件处理 React事件绑定属性的命名采用驼峰写法,不同于传统DOM全部小写. 如果采用JSX的语法,事件函数需要用大括号{}包裹函数名,不同于传统DOM字符串小括号的方 ...
- React学习笔记(五)State&声明周期
React学习笔记(五) 四.State&声明周期 可以为组件添加"状态(state)".状态与属性相似,但是状态是私有的,完全受控于当前组件. 局部状态就是只能用于类(定 ...
- React学习笔记 - 组件&Props
React Learn Note 4 React学习笔记(四) 标签(空格分隔): React JavaScript 三.组件&Props 组件可以将UI切分成一些独立的.可复用的部件,这样你 ...
- React学习笔记 - 元素渲染
React Learn Note 3 React学习笔记(三) 标签(空格分隔): React JavaScript 二.元素渲染 元素是构成react应用的最小单位. 元素是普通的对象. 元素是构成 ...
- React学习笔记 - JSX简介
React Learn Note 2 React学习笔记(二) 标签(空格分隔): React JavaScript 一.JSX简介 像const element = <h1>Hello ...
- React学习笔记 - Hello World
React Learn Note 1 React学习笔记(一) 标签(空格分隔): React JavaScript 前.Hello World 1. 创建单页面应用 使用Create React A ...
随机推荐
- http协议Keep-Alive
Keep-Alive 是什么? 概观 默认情况下,HTTP链接通常在请求完成之后关闭.这意味着服务端在完成响应的交付之后便关闭了TCP链接.为了让链接保持打开,来满足多请求,可以使用keep-aliv ...
- Centos 6.* / 7.*下通过yum安装php7
查看 centos 版本 # cat /etc/centos-release 删除之前的 php 版本 # yum remove php* php-common rpm 安装 Php7 相应的 yum ...
- 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam
Coursera吴恩达<优化深度神经网络>课程笔记(2)-- 优化算法 深度机器学习中的batch的大小 深度机器学习中的batch的大小对学习效果有何影响? 1. Mini-batch ...
- json转字符串 —— jsonObj.toJSONString()与JSON.stringify(jsonObj)
ar people = { "programmers": [{ "firstName": "Brett", "lastName&q ...
- Linux 2.6.32内核字符设备驱…
引言:Linux驱动中,字符设备的设计一般会占产品驱动开发的90%以上,作者根据驱动开发的实际经验,总结了一个标准的字符设备驱动的模板,仅供参考. //=======================字 ...
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 3_Linear Algebra Review
Lecture3 Linear Algebra Review 线性代数回顾 3.1 矩阵和向量3.2 加法和标量乘法3.3 矩阵向量乘法3.4 矩阵乘法3.5 矩阵乘法的性质3.6 逆.转置 3. ...
- centos6下的安装navicat premium
centos6下的安装navicat premium CentOS6下做开发的时候,数据库客户端是一个必须要有的工具,因为经常要和数据库打交道.由于数据库的类型多样,有MySQL.Oracle.Pos ...
- 并发之Striped64(l累加器)
并发之Striped64(累加器) 对于该类的实现思想: Striped64是在java8中添加用来支持累加器的并发组件,它可以在并发环境下使用来做某种计数,Striped64的设计思路 ...
- jsp Ajax请求(返回xml数据类型)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- scrapy设置代理
在爬取网站内容的时候,最常遇到的问题是:网站对IP有限制,会有防抓取功能,最好的办法就是IP轮换抓取(加代理) 下面来说一下Scrapy如何配置代理,进行抓取 1.在Scrapy工程下新建“middl ...