React学习笔记(一)- 入门笔记
React入门指南
作者:狐狸家的鱼
本文链接:React学习笔记
GitHub:sueRimn
1.组件内部状态state
的修改
- 修改组件的每个状态,组件的
render()
方法都会再次运行。这样就可以修改组件内部状态,确保组件重新改渲染并且展示从内部状态获取到的正确数据 - 初始状态应该通过
this
绑定到类上
class App extends Component {
//构造函数在一个组件周期只执行一次
constructor(props) {
super(props);
//state通过this绑定在类上 可以在整个组件中访问到state
this.state = {
...
};
}
render(){
...
}
}
- 注意:不能直接修改
state
,必须使用setState()
方法进行修改
2.对象初始化
- 简写属性名
const name = 'sueRimn';
const user = {
//属性名与变量名相同时
name,
};
}
- 简写方法名
const userService = {
const key = 'name';
const user2 = {
[key] :'sueRimn',
};
3.单项数据流
- 在类内部绑定方法
class App extends Component {
//构造函数只应该实例化类以及所有属性,不应该处理业务逻辑
constructor(props) {
super(props);
//state通过this绑定在类上 可以在整个组件中访问到state
this.state = {
...
};
//在构造函数中绑定它,定义为类方法 this指向类实例
this.onDismiss = this.onDismiss.bind(this);
}
render()
}
- 使用
ES6
箭头函数,自动绑定到类
class App extends Component {
constructor(props) {
super(props);
this.state = {
...
};
}
//在类外定义它的功能和业务逻辑
onDismiss = id => {//箭头函数
...
}
render(){
}
}
4.事件处理
- 在外部定一个包装函数,并且只将定义的函数传递给处理程序
- 使用箭头函数
5.与表单交互
- 需要将输入的只存在本地状态中,使用合成事件访问事件返回值
- 使用高阶函数(在组件外定义):一个函数返回另一个函数
6.ES6
解构
访问对象和数组的属性,叫解构
7.受控组件
- 将不受控组件改为受控
8.拆分组件
props
通过this
访问
9.可组合组件
props
中有一个属性children
可供使用,通过它可以将元素从上层传递到组件中- 不仅可以传递文本为子元素给组件,还可以将一个元素或者元素数(组件)作为子元素传递
10.可复用组件
函数式无状态组件:
- 就是函数
- 无本地状态,不能使用
setState()
和this.state
更新或者访问状态 - 接收一个输入并返回一个输出,输入的是
props
,输出的是JSX
组件实例。 - 没有生命周期方法
ES6类组件:
- 在类的定义中,它们继承自
React
组件 extend
会注册所有的生命周期方法,只要在React component API
中,都可以在组件中使用- 可以使用
this.state
和setState()
- 在类的定义中,它们继承自
React.createClass
:不推荐使用
写法区别如下:
//定义组件 props通过this可以访问
//1.ES6组件类写法
class Search extends Component{
render(){
const {value, onChange, children} = this.props;
return(
<form>
{children}
<input
type="text"
value={value}
onChange={onChange}
>
</input>
</form>
)
}
}
//2.函数无状态类组件写法
const Search = ({value, onChange, children}) =>
<form>
{children}
<input
type="text"
value={value}
onChange={onChange}
>
</input>
</form>
当组件不需要使用更改内部状态且无生命周期的时候定义组件为函数式无状态组件; 当需要访问state
或者生命周期方法时,就用ES6
类组件
11.给组件声明样式
12.使用真实API
- 生命周期方法(执行顺序排序):
constructor()
构造函数:只有在组件实例化(挂载)并插入到DOM
中的时候才会被调用componentWillMount()
:组件挂载中render()
:在组件挂载的时候调用,同时当组件更新的时候也会被调用。每当组件的状态或者属性改变时,就会被调用componentDidMount()
:组件挂载结束
- 当组件的状态或者属性发生改变时生命周期的变化(5个方法用于组件更新):
componentWillReceiveProps()
:shouldComponentUpdate()
componentWillUpade()
render()
componentDidUpdate()
- 组件卸载也有生命周期:只要一个-
componentWillUnmount()
- 生命周期方法的适用场景:
constructor(props)
:在组件初始化时被调用,可以设置初始化状态以及绑定类方法componentWillMount()
:在render()
之前被调用,可以设置组件内部状态,因为不会触发组件的再次渲染render()
:返回作为组件输出的元素。应该作一个纯函数,不应该在此修改组件的状态。它把属性和状态作为输入并且返回(需要渲染的)元素componentDidMount()
:仅在组件挂载后执行一次。是发起异步请求去API获取数据的最佳时期;获取到的数据将被保存在内部组件的状态中然后 在render()
生命周期方法中展示出来componentWillReceiveProps(nextProps)
: 在一个更新生命周中被调用,新的属性会作为它的输入。因此可以利用this.props
来对比之后的属性和 之前的属性,基于对比的结果去实现不同的行为。此外,可以基于新的属性来设置组件的状态- ·shouldComponentUpdate(nextProps, nextState)·: 每次组件因为状态或者属性更改而更新时,它都会被调用,使用它来进行性能优化
componentWillUpdate(nextProps, nextState)
: 这个方法是render()
执行之前的最后一个方法。 利用这个方法在渲染之前进行最后的准备。 注意在这个生命周期方法中不能再触发setState()
。如果你想基于新的属性计算状态,必须利用componentWillReceiveProps()
componentDidUpdate(prevProps, prevState)
:这个方法在render()
之后立即调用。可以用它当成操作DOM
或者执行更多异步请求的机会。componentWillUnmount()
: 它会在组件销毁之前被调用。 可以利用这个生命周期方法去执行任何清理任务componentDidCatch(error, info)
: 用来捕获组件的错误
- 获取数据
- 扩展运算符
- 条件渲染
- 使用jsx的if-else
- 三元运算符
- &&逻辑运算符
- 客户端或服务端搜素
13.高级React组件
- 引用DOM元素
- 加载
- 高阶组件(HOC)
- 使用with前缀命名
React学习笔记(一)- 入门笔记的更多相关文章
- 笔记 docker入门笔记
安装sudo apt-get remove docker docker-engine docker-ce docker.iosudo apt-get updatesudo apt-get instal ...
- React.js入门笔记
# React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...
- 每天成长一点---WEB前端学习入门笔记
WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...
- python学习笔记--Django入门四 管理站点--二
接上一节 python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...
- react学习笔记1--基础知识
什么是react A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES[React是一个用于构建用户界面的JavaScript库.] React之所以快, ...
- WebSocket学习笔记——无痛入门
WebSocket学习笔记——无痛入门 标签: websocket 2014-04-09 22:05 4987人阅读 评论(1) 收藏 举报 分类: 物联网学习笔记(37) 版权声明:本文为博主原 ...
- React学习笔记--程序调试
React学习笔记 二 程序调试 前面我们搭建好了React的基本开发环境,可以编写基本的React js程序了.但完成的开发环境肯定包含调试器,怎么调试用React编写的JS程序呢?有浏览器,比 ...
- ORMLite学习入门笔记
ORMLite学习入门笔记 使用原始的SQLiteHelper来操作维护数据库有点过于繁琐,重复工作量较大.所以会想到使用一个比较方便的ORM来维护我们本地的数据库,各位业界前辈都给我推荐了ORMLi ...
- React学习笔记(七)条件渲染
React学习笔记(七) 六.条件渲染 使用if或条件运算符来创建表示当前状态的元素. 可以使用变量来存储元素.比如: let button = null; if (isLoggedIn) { but ...
随机推荐
- IntelliJ IDEA下的使用git
1.git简介 git是目前流行的分布式版本管理系统.它拥有两套版本库,本地库和远程库,在不进行合并和删除之类的操作时这两套版本库互不影响.也因此其近乎所有的操作都是本地执行,所以在断网的情况下任然可 ...
- IM多类型holder封装
如标题,这是一个在列表多类型视图时的一个简化封装方法,减少多余代码,提高复用性,更好迭代扩展,先看视图列表效果图 GitHub:https://github.com/1024477951/Fragme ...
- 【English】十五、“a”和“one”的区别是什么?
一."a"和"one"的区别是什么 参考:“a”和“one”的区别是什么-百度知道 a和one的区别是什么?-作业帮 1.尽管a和one这两个在意义上有些相似, ...
- Jmeter Beanshell 用法
Beanshell 的用法 什么是beanshell Beanshell是一种完全符合java语法的脚本语言,并且拥有自己的内置对象和语法 Beanshell是用java写的,一个小型嵌入式java源 ...
- 996.ICU 写给... 写给年轻的自己
好久不"水"长文了,随着Github开源项目996.ICU (工作996,生病ICU) (本意是为了指出互联网等早9晚9每周工作6天的不良加班工作制风气不符合法律,是对程序员等技术 ...
- mysql表与表之间数据的转移
1.相同表结构 INSERT INTO table1 SELECT * FROM table2; 2.不同表结构 INSERT INTO table1(filed1,...,filedn) SELEC ...
- 【记录】使用在线KMS激活win10系统
摘要 网上一些激活工具可能捆绑了木马.病毒.使用激活工具有风险.使用在线KMS来激活系统则没有这个风险.(自测至发布日期仍然可用) (有能力的请支持正版windows系统) 将kms服务器地址设置为k ...
- NVIDIA-SMI系列命令总结
1 NVIDIA-SMI介绍 nvidia-smi简称NVSMI,提供监控GPU使用情况和更改GPU状态的功能,是一个跨平台工具,它支持所有标准的NVIDIA驱动程序支持的Linux发行版以及从Wi ...
- NOIP 2018 大翻车记
都9102年了我才想起来写游记啊 Day -1 肚子里翻江倒海,一天去了七次厕所.吃了PPA把病压下去.安慰一下自己,说这样会涨人品. Loli讲述学长们的翻车笔记.我大概像是玩笑一样听过去了.(伏笔 ...
- openwrt 里LUA程序怎么获取POST数据?
https://www.zhihu.com/question/31579325 作者:齐葛链接:https://www.zhihu.com/question/31579325/answer/28342 ...