博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
react Promise && Ref learning
阅读量:6890 次
发布时间:2019-06-27

本文共 1770 字,大约阅读时间需要 5 分钟。

  最近在工作中接触到了Promise和Ref,两个很重要的知识点,是我们前端的必备技能(But i just learned about it),记录一下学习过程~

-----Promise-----

  在Javascript中,我们经常需要实现异步执行,通常,我们会使用嵌套的回调函数解决。但是对于一些复杂的问题,用回调函数比较麻烦或无法解决,代码的可读性差、维护起来也比较困难。这时,Promise比较适合。

  Promise是一个构造函数,本身有all、reject、resolve、race等方法,原型方法有then、catch等常用方法。如图所示

  使用的时候需要new Promise,Promise的构造函数需要接受一个参数,是一个函数,这个函数有两个参数resolve和reject,分别表示异步操作执行成功后的回调函数和异步操作执行失败的回调函数,即resolve将Promise的状态置为fullfiled,reject将Promise的状态置为rejected。

  我们来new一个Promise

const  p = new Promise((resolve, reject) => {    //做一些异步操作    setTimeout(() => {        console.log('complete');        resolve('Success');    }, 3000);});

  运行结果

      

  在上面的代码中,我们执行了setTimeout这个异步操作,3秒后,输出"complete",并且调用了resolve方法。

  在这里,我们只是new了一个对象,并没有调用它,传进去的函数就已经执行了。所以通常我们用Promise的时候是把它包在一个函数中,在需要的时候调用这个函数。Like this

1 runAsync = () => {2      return new Promise((reslove, reject) => {3          setTimeout(() => {4              console.log('complete');5              resolve('success');6         });7     })      8 } 9 runAsync()

 

1 runAsync().then((data) => {2     console.log(data);3     // some logic4 });

  包装的函数runAsync里面return Promise 对象,然后调用runAsync()方法,在runAsync()上就可以调用then,catch方法了。

   其它详细介绍请看:大白话讲解Promise https://www.cnblogs.com/lvdabao/p/es6-promise-1.html

-----Ref-----

  最近在项目中遇到这种情形,在父级组件中调用子组件中的方法。首先在父级组件的constructor中创建Ref

  
1 constructor(props) {2      super(props);3      this.testRef = React.createRef();    4 }

  然后传给子组件的ref属性

1 

  在父级组件中就可以使用子组件的方法了,子组件中如果有一个handleOpen()方法

1 // 子组件 2 handleOpen = () => { 3   this.setState({ open: true }); 4   return new Promise((resolve, reject) => { 5     this.resolve = resolve; 6     this.reject = reject; 7   }); 8 } 9 // 父组件10 const value = await this.testRef.current.handleOpen();

 

 

 

转载于:https://www.cnblogs.com/zhaoyzml/p/10145717.html

你可能感兴趣的文章
Nodejs日志管理log4js
查看>>
python获取昨日日期
查看>>
海康威视 - 萤石云开放平台 js 版
查看>>
关于分销平台
查看>>
剑指offer---12-**--数值的整数次方
查看>>
PAT - L2-010. 排座位(并查集)
查看>>
Python 学习笔记 - 线程(线程锁,信标,事件和条件)
查看>>
大数据技术服务商个推获4亿人民币D轮融资
查看>>
Git的详细使用教程
查看>>
iOS实现类似苹果手机原生的锁屏界面(数字密码)
查看>>
[vue] 表单输入格式化,中文输入法异常
查看>>
Observer观察者模式与OCP开放-封闭原则
查看>>
如何搭建高级工程师知识框架?推荐两种方式
查看>>
BAT的医疗春秋大梦
查看>>
Pulsar本地单机(伪)集群 (裸机安装与docker方式安装) 2.2.0
查看>>
利用H5的css3制作动画
查看>>
Android View 事件分发源码分析
查看>>
vue 2.0 - props
查看>>
RustCon Asia 实录 | Rust 在国内某视频网站的应用
查看>>
Vue遇上Analytics
查看>>