react学习笔记
时间:2019-10-17
本文章向大家介绍react学习笔记,主要包括react学习笔记使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
- React 可以非常轻松地创建用户交互界面。为你应用的每一个状态设计简洁的视图,在数据改变时 React 也可以高效地更新渲染界面。
- 以声明式编写UI,可以让你的代码更加可靠,且方便调试。
- 创建好拥有各自状态的组件,再由组件构成更加复杂的界面。
- 无需再用模版代码,通过使用JavaScript编写的组件你可以更好地传递数据,将应用状态和DOM拆分开来。
- 无论你现在正在使用什么技术栈,你都可以随时引入 React 开发新特性。
- React 也可以用作开发原生应用的框架 React Native。
react库
- react.js—— React的核心库
- react-dom.js——提供与DOM相关的功能
- Browser.js——将JSX语法转为JavaScript语法
注:
- 上面3个库放在页面顶部,首先加载
- 此外标签的type属性为
text/babel
(JSX 语法,跟JavaScript不兼容,通过Browser.js解析); - 实际上线 babel先build(解析jsx比较耗时)
JSX语法
- HTML 语言直接写在 JavaScript 语言之中,不加任何引号,这就是 JSX 的语法,它允许 HTML 与 JavaScript 的混写
- ReactDOM.render() 是 React 的最基本方法,用于将模板转为 HTML 语言,并插入指定的 DOM 节点;render()方法只有一个根标签,否则会报错
ReactDOM.render(
<h1>Hello, world!</h1>,
document.getElementById('container')
);
- JSX 的基本语法规则:遇到 HTML 标签(以 < 开头),就用 HTML 规则解析;遇到代码块(以 { 开头),就用 JavaScript 规则解析。
let arr=[
<b>item1</b>,
<b>item2</b>,
<b>item3</b>
];
ReactDOM.render(
<div>
{
arr.map(item => <h1>this is {item}</h1>)
}
</div>,
document.getElementById('container')
);
react组件
- React 允许将代码封装成组件(component),然后像插入普通 HTML 标签一样,在网页中插入这个组件。React.createClass 方法就用于生成一个组件类
let ComponentA = React.createClass({
render(){
return (<h1>this is {this.props.name}</h1>)
}
});
ReactDOM.render(
<ComponentA name="componentA"/>,
document.getElementById('container')
);
注:
- 组件名首字母必须大写,否则报错
- 组件必须有render()方法,用于输出组件
- render()方法唯一根标签,否则报错
- 组件标签用法与HTML标签用法相同,
name="componentA"
表示组件加入一个值为componentA的属性,组件的属性可以在组件类的this.props
对象上获取 - 组件的添加javaScript 保留字为属性名时,写法会有区别:如class->className
- this.props.children特殊属性
- this.props.children表示组件的所有子节点,类型可能为undefined、object、array(子节点个数),
- React.Children.map(children, function[(thisArg)])可以用来遍历所有子节点而不需考虑节点个数,
- React.Children.forEach(children, function[(thisArg)])类似但是不返回一个数组
let ComponentA = React.createClass({
render() {
return (
<ul>
{
React.Children.map(this.props.children,item => <li>{item}</li>)
}
</ul>
);
}
});
ReactDOM.render(
<ComponentA>
<i>item1</i>
<i>item2</i>
<i>item3</i>
</ComponentA>,
document.getElementById('container')
);
- PropTypes和getDefaultProps
- PropTypes:就是用来验证组件实例的属性是否符合要求
- getDefaultProps: 方法可以用来设置组件属性的默认值 ``` html let ComponentA = React.createClass({ propTypes: { name: React.PropTypes.string.isRequired, }, getDefaultProps() { return { title : ‘Hello World’ }; }, render() { return ( <h1>{this.props.title},{this.props.name}</h1> ); } });
let a=’moning’; ReactDOM.render( <ComponentA name={a}/>, document.getElementById(‘container’) ); ```
虚拟DOM
- 组件并不是真实的 DOM 节点,而是存在于内存之中的一种数据结构,叫做虚拟 DOM (virtual DOM)。只有当它插入文档以后,才会变成真实的 DOM 。根据 React 的设计,所有 大专栏 react学习笔记的 DOM 变动,都先在虚拟 DOM 上发生,然后再将实际发生变动的部分,反映在真实 DOM上,这种算法叫做 DOM diff ,它可以极大提高网页的性能表现。
- 但是,有时需要从组件获取真实 DOM 的节点,这时就要用到 ref 属性
- 需要注意的是,由于 this.refs.[refName] 属性获取的是真实 DOM ,所以必须等到虚拟 DOM 插入文档以后,才能使用这个属性,否则会报错。通过为组件指定事件的回调函数,确保了只有等到真实 DOM 发生事件之后,才会读取 this.refs.[refName] 属性。
- React 组件支持很多事件,除了 Click 事件以外,还有 KeyDown 、Copy、Scroll 等
this.state
- 组件与用户交互,组件充当一个状态机,一开始有个初始状态,然后用户交互,改变状态,从而触发UI重新渲染。
let ComponentA = React.createClass({ getInitialState() { return {liked: false}; }, handleClick(event) { this.setState({liked: !this.state.liked}); }, render() { var text = this.state.liked ? 'ON' : 'OFF'; return ( <p onClick={this.handleClick}> {text} . Click to toggle. </p> ); } }); ReactDOM.render( <ComponentA/>, document.getElementById('container') );
- 由于 this.props 和 this.state 都用于描述组件的特性,可能会产生混淆。一个简单的区分方法是,this.props 表示那些一旦定义,就不再改变的特性,而 this.state 是会随着用户互动而产生变化的特性。
表单输入框
- 文本输入框的值,不能用 this.props.value 读取,而要定义一个 onChange 事件的回调函数,通过 event.target.value 读取用户输入的值。textarea 元素、select元素、radio元素都属于这种情况
let ComponentA = React.createClass({
getInitialState() {
return {value: 'Hello!'};
},
handleChange(event) {
this.setState({value: event.target.value});
},
render() {
var value = this.state.value;
return (
<div>
<input type="text" value={value} onChange={this.handleChange} />
<p>{value}</p>
</div>
);
}
});
ReactDOM.render(
<ComponentA/>,
document.getElementById('container')
);
组件的生命周期
- 组件的生命周期分成三个状态:
- Mounting:已插入真实 DOM
- Updating:正在被重新渲染
- Unmounting:已移出真实 DOM
- React 为每个状态都提供了两种处理函数,will 函数在进入状态之前调用,did 函数在进入状态之后调用,三种状态共计五种处理函数。
- componentWillMount()
- componentDidMount()
- componentWillUpdate(object nextProps, object nextState)
- componentDidUpdate(object prevProps, object prevState)
- componentWillUnmount()
- 此外,React 还提供两种特殊状态的处理函数。
- componentWillReceiveProps(object nextProps):已加载组件收到新的参数时调用
- shouldComponentUpdate(object nextProps, object nextState):组件判断是否重新渲染时调用
let ComponentA = React.createClass({
getInitialState() {
return {
opacity: 1.0
};
},
componentDidMount() {
this.timer = setInterval(function () {
var opacity = this.state.opacity;
opacity -= .05;
if (opacity < 0.1) {
opacity = 1.0;
}
this.setState({
opacity: opacity
});
}.bind(this), 100);
},
render() {
return (
<div style=>
Hello world
</div>
);
}
});
ReactDOM.render(
<ComponentA/>,
document.getElementById('container')
);
组件的数据来源
- 通常是通过 Ajax 请求从服务器获取,可以使用 componentDidMount 方法设置 Ajax 请求,等到请求成功,再用 this.setState 方法重新渲染 UI
原文地址:https://www.cnblogs.com/sanxiandoupi/p/11692271.html
- Dubbo源码解析 - 远程暴露
- 使用FastText(Facebook的NLP库)进行文本分类和word representatio...
- 声音分类的迁移学习
- 【死磕Java并发】—– J.U.C之AQS:CLH同步队列
- 使用Python完成你的第一个学习项目
- CA,给了数据库,给了机器,为啥也扩不了容?
- 如何使用Anaconda设置机器学习和深度学习的Python环境
- MQ,互联网架构解耦神器
- 预测随机机器学习算法实验的重复次数
- 服务化了,没想到耦合更加严重?
- 如何在Python中扩展LSTM网络的数据
- 使用Keras的Python深度学习模型的学习率方案
- 全球电脑手机无一幸免,英特尔CPU“漏洞事件”到底多严重?
- 评估Keras深度学习模型的性能
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 排序算法与查找算法
- nginx学习(1): openresty安装
- 2020年8月26日更新WINDOWS服务器同时安装多个版本的MYSQL的方法,MQYSQL5和MQYSQL8的共存。
- python 自动化测试(3):数据库连接与使用
- 微信小程序实战开发二:微信小程序 WEUL组件之 画廊组件
- 关于Cookie和Session
- 微信小程序实战开发一:在小程序中使用useExtendedLib方法引入官方UI
- python 自动化测试(4):日志类封装
- 微信小程序实战开发三:小程序之全局配置APP.JSON之底部菜单栏tabBar
- python 自动化测试(5):页面基类封装
- 微信小程序实战开发四:小程序获取用户信息流程及信息存储方式解析
- python 自动化测试(6):jar包调用
- 微信小程序实战开发五:使用自定义组件配置一个通用的图片轮播组件。
- 亿级流量系统如何玩转 JVM
- 微信小程序实战开发六:使用weui-flex创建一个可自由配置的布局组件。