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.statesetState()
  • 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学习笔记(一)- 入门笔记的更多相关文章

  1. 笔记 docker入门笔记

    安装sudo apt-get remove docker docker-engine docker-ce docker.iosudo apt-get updatesudo apt-get instal ...

  2. React.js入门笔记

    # React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...

  3. 每天成长一点---WEB前端学习入门笔记

    WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...

  4. python学习笔记--Django入门四 管理站点--二

    接上一节  python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...

  5. react学习笔记1--基础知识

    什么是react A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES[React是一个用于构建用户界面的JavaScript库.] React之所以快, ...

  6. WebSocket学习笔记——无痛入门

    WebSocket学习笔记——无痛入门 标签: websocket 2014-04-09 22:05 4987人阅读 评论(1) 收藏 举报  分类: 物联网学习笔记(37)  版权声明:本文为博主原 ...

  7. React学习笔记--程序调试

    React学习笔记 二 程序调试   前面我们搭建好了React的基本开发环境,可以编写基本的React js程序了.但完成的开发环境肯定包含调试器,怎么调试用React编写的JS程序呢?有浏览器,比 ...

  8. ORMLite学习入门笔记

    ORMLite学习入门笔记 使用原始的SQLiteHelper来操作维护数据库有点过于繁琐,重复工作量较大.所以会想到使用一个比较方便的ORM来维护我们本地的数据库,各位业界前辈都给我推荐了ORMLi ...

  9. React学习笔记(七)条件渲染

    React学习笔记(七) 六.条件渲染 使用if或条件运算符来创建表示当前状态的元素. 可以使用变量来存储元素.比如: let button = null; if (isLoggedIn) { but ...

随机推荐

  1. MySQL数据库中的四种隔离级别

    事务的隔离性比想象的要复杂,在 SQL 标准中定义了四种级别的隔离级别.通常而言,较低级别的隔离通常可以执行更高的并发,系统的开销也更低 READ UNCOMMITTED 该级别为未提交读.在该级别中 ...

  2. EF时,数据库字段和实体类不一致问题

    场景:由于一些原因,实体中属性比数据库中字段多了一个startPage属性.PS:controllers中用实体类去接收参数,但是传入的参数比数据库中实体表多了一个字段, 这种情况下,应该建一个vie ...

  3. 新坑:c#弄微信公众号

    微信公众号作为一个平台级别的产品,对商业应用来说,有很大的吸引力.如何让公众号更好的吸粉?靠内容不是一般小商户可以做到的,那是网红自媒体的强项.一般商户要怎么突围?那就是提供实用,有意义的功能给粉丝. ...

  4. 前端开发之基础知识-HTML(二)

    1.6 html链接 html链接 <a>标签可以在网页上定义一个链接地址,通过src属性定义跳转的地址,通过title属性定义鼠标悬停时弹出的提示文字框. <a href=&quo ...

  5. python3 tkinter报错:_tkinter.TclError: cannot use geometry manager pack inside . which already has slaves managed by grid

    报错: _tkinter.TclError: cannot use geometry manager pack inside . which already has slaves managed by ...

  6. DNS域名解析过程,域名的认识

    DNS域名解析过程 参考知乎:https://www.zhihu.com/question/23042131 当你通过浏览器输入url访问资源时,会请求DNS解析域名成对应的IP地址,由IP地址在去与 ...

  7. windows 和linux 路径解析的区别

    windows下使用的是“\”作为分隔符,而linux则反其道而行之使用"/"作为分隔符.所以在windows 环境中获取路径常见 C:\windows\system 的形式,而l ...

  8. 配置sonarqube与gitlab sso认证集成

    1.安装插件 sonar插件地址:https://github.com/gabrie-allaigre/sonar-auth-gitlab-plugin 安装插件: 下载插件然后通过maven打包然后 ...

  9. easyui datagrid 表头固定(垂直滚动条)、列固定(水平滚动条)

    easyui datagrid 表头固定(垂直滚动条).列固定(水平滚动条),每页显示1000行 最近用多了easyui 之后还是觉得它的功能还是很强大的.它原有的功能就已经能够满足90%以上的界面需 ...

  10. iis500错误分析

    1.检查isapi和cgi限制,看相应的扩展是否设为允许. 2.让错误显示到客户端 3.HTTP 错误 500.21 - Internal Server Error 原因:在安装Framework v ...