首先,需要对静态方法做一个理解。static静态方法,在es5中怎么实现呢?网易云课堂 微信授权扫码点餐-新特性React16
function Person() {}
Person.getCount = function () {}
以上就是static静态方法的原理。由于“this”只能获取属性是根据原型链,而静态方法不在原型链上,所以,在组件实例内无通过this调用static方法,static方法也无法根据"this"调用实例的其他方法。
就防止在getDerivedStateFromProps 对组件实例的错误操作。
再次,getDerivedStateFromProps用来做什么用呢?
当组件实例化、接收到新的props时,会调用该方法。方法返回一个对象,这个对象会被更新到组件的state上。如果返回空,那么不对state做更新。

// 以下代码实现,更新name属性到state上;
static getDerivedStateFromProps (nextProps, prevState) {return {name: nextProps.name};
}// 上面的代码在以前版本中
// 你可能会用以下这样做,虽然这样做看起来也没问题,用上面的方法更加安全,不会对this做误操作
componentWillReceiveProps (nextProps) {if (this.state.name !== nextProps.name) {this.setState({name: nextProps.name});}
}

b.如何理解getSnapshotBeforeUpdate(prevProps, prevState)?

首先,从字面来理解“snapshot”是快照的意思。在dom更前之前调用。返回的值将被传给componentDidUpdate(prevProps, prevState, snaphot)。
这个会比较少用到,但对于处理比如数据更新后的滚动条的差异滚动,对用户体验,很有帮助。

c.如何理解componentDidCatch(error, info)?

以往,当组件发生错误(可以用throw new Error模拟)时,会导致整个react程序死掉,这对于程序的稳定性来说非常不好。
componentDidCatch可以捕获子组件中任何一个错误,捕获到错误后可以对错误进行处理。
如果发生错误的组件的父组件没有设置componentDidCatch错误捕获,将继续递归父组件的父组件中的componentDidCatch,找到则停止。

// 简单的错误捕获
componentDidCatch (error, info) {this.setState({error: true});
}render () {if (this.state.error) {return <div>子组件发生异常了</div>}// 其他代码
}

第二:优化了哪些语法

1: ref优化

ref有很多作用,通过ref父组件可以调用子组件内的方法,配合ReactDOM.findDOMNode(ref) 可以获取到组件对应的dom。ref与key一样无法通过this.props.ref获取;

以前版本的react,给子组件添加ref=“inputName”,就可以通过this.refs['inputName']获取子组件实例。然后可以进行一些操作。

React16中有两种创建Ref的方法:

constructor () {this.inputNameRef = React.createRef();this.switchRef = React.createRef();
}render () {// 通过this.inputNameRef.current 可以获取到input实例return (<div><input ref={this.inputNameRef} /><Switch ref={this.switchRef} /></div>)
}
render () {// 通过回调ref的方式实现// 通过this.inputNameRef 可以获取到input实例// this.switchRef可以获取Switch的实例return (<div><input ref={(ref) => this.inputNameRef = ref} /><Switch ref={(ref) => this.switchRef = ref} /></div>)
}

那,既然ref和key可以一样不能用this.props获取,有没有办法传给子组件呢?这样就可以实现在组件中调用子子组件(比如子组件中的input)了。

答案是肯定的。

也有两种方法:

render () {// 假设this.switchRef已经在constructor里创建了,那么可以通过其他属性传递。// 在子组件中可以通过this.props.forRef。// 注:forRef 为随便名只要不是react内置的名称就行return (<Switch forRef={this.switchRef} />);
}
// 通过React.forwardRef 传递
export default React.forwardRef((props, ref) => {return (<div><OtherChild /><Switch ref={ref} /><OtherChild2 /></div>)
});

微信授权扫码点餐-新特性React16相关推荐

  1. 监听网页微信扫码支付成功_网付扫码点餐新福利,消费者点餐可获微信支付金币奖励...

    扫码点餐相信大家都不陌生,即能餐饮解决商家人力物力投入成本痛点,又能方便消费者点餐.现今已成为了餐饮商户的标配系统.近两年,很多系统厂商都在试水扫码点餐领域.尤其是聚合支付服务商,拥有得天独厚的优势. ...

  2. 2021年新微信小程序开发系统源码易客多小程序saas系统扫码点餐小程序支付宝小程序快速生成系统源码源代码

    2021年新微信小程序开发系统源码小程序saas系统扫码点餐小程序支付宝小程序快速生成系统 产品介绍:易客多多合一小程序快速生成系统是厦门四六开科技有限公司开发的快速开发微信百度支付宝小程序生成系统, ...

  3. Java后台微信点餐小程序开发最新版笔记,Springboot+Mysql+Freemarker+Bootstrap+微信小程序实现扫码点餐小程序,包含语音提示,微信消息推送,网页管理后台

    由于之前的Java后台微信点餐小程序有些知识点过时了,所以今天重新出一版,把里面过时的知识点更新下 前五章是部署笔记,后面是知识点的详细讲解,大家可以先看部署笔记,部署起来后,再跟着详细知识学习. 第 ...

  4. 手把手带你开发一款云开发版点餐小程序,微信扫码点餐,店铺地图导航,外卖小程序,用户端和后厨端都有

    从今天开始带领大家实现一款云开发版的点餐小程序 视频讲解:<云开发后台+微信扫码点餐小程序+cms网页管理后台> 技术选型 1,前端 微信小程序原生框架 css JavaScript 2, ...

  5. 微信扫码点餐小程序springboot外卖点餐系统源码和论文

    开发工具: 后端:idea   用户端:微信开发者工具 数据库 :mysql5.7+ 技术:java  springboot  mybatis  微信原生技术 角色:   管理员  多商家    用户 ...

  6. 微信扫码点餐系统制作流程简单,方便客户下单

    扫码点餐,对于餐饮行业来说,是必不可少的重要的一环,它可以帮助顾客点餐.顾客通过微信扫码,就可以获取到菜单,查看菜品的图片以及优惠活动,操作十分简单,而且效率比传统菜单要好很多. 对于新手来说,不会制 ...

  7. 微信扫码点餐小程序制作简单,功能齐全

    扫码点餐,对于餐饮行业来说,是必不可少的重要的一环,它可以帮助顾客点餐.顾客通过微信扫码,就可以获取到菜单,查看菜品的图片以及优惠活动,操作十分简单,而且效率比传统菜单要好很多. 对于新手来说,不会制 ...

  8. android简单点餐系统_微信点餐和扫码点餐系统能为商家带来什么?

    近几年来,我们去餐厅吃饭的时候可能会发现,很多餐厅都安装扫码点餐系统.和微信点餐系统,相比传统餐饮软件及传统模式,这带来的不只是节省人工.一套系统稳定.功能齐全的微信点餐系统,对餐饮管理而言,能够降低 ...

  9. 微信扫码点餐小程序怎么做,一步步教你

    在当今数字化时代,更多的餐厅开始使用扫码点餐系统.这种系统可以提高顾客的点餐效率,减少服务员的工作负担.如果你也想要在你的餐厅中使用扫码点餐系统,那么你来对地方了. 第一步:搭建微信小程序后台 在微信 ...

最新文章

  1. python初学工资-python工资高还是java?
  2. 在水晶报表中实现任意选择指定字段显示-模板及C#升级版
  3. linux如何判断网线插入_【干货】配线架的连接方式有哪几种?配线架与交换机如何连接?...
  4. 10个舍不得删的高质量公号
  5. 登上热搜!这可能是中国最穷的211大学
  6. 浪潮服务器5112面板灯_SA5112M4 – IPMI设置
  7. java框架mangedv,Spring集成JPA后,报“Not an managed type: class x.x.x
  8. 2019 Go 开发者路线图,请收下这份指南!
  9. 在虚函数 声明中写override的作用
  10. 医疗器械软件质量体系等
  11. 单片机原理及接口技术第1章
  12. 美团点评 2019校园招聘 后台开发方向职位编程题-2018.09.06
  13. GitLab CI介绍——入门篇
  14. wps怎么删掉分节符_怎样删除分页符(批量删除wps文档中展示分页符)
  15. QQ登录的加密传输安全
  16. Urban Traffic System 创建行人路线
  17. 一条气象预警是如何产生的
  18. 人工神经网络英文简称为,人工神经网络英文缩写
  19. 【Godot测试】【在Godot中添加VRM模型和VMD动画并播放】
  20. 智慧城市在七个方面的应用

热门文章

  1. 风格迁移应用_浅谈风格迁移(一)固定风格迁移
  2. 服务器win10系统开机慢,Win10开机速度慢的解决方法
  3. 亲身经历在国企搞IT:自我总结500页“Java成长笔记”,谁说待国企就是养老!?
  4. 详解硬件设计中电容电感磁珠
  5. 能耗在线监测系统在酒店节能管理中的应用
  6. Nginx安装/负载均衡/反向代理配置与调优
  7. SBG Ellipse2最强替代型号推荐?AHRS INS/GNSS
  8. 智能机器人软件开发入门教程:带你从0到1快速入门
  9. 如何在Vue中使用lottie加载SVG动画
  10. 安卓游戏开发一(超级玛丽)