回调函数

react - 组件API

为君一笑 提交于 2019-12-01 07:08:24
官网地址: https://zh-hans.reactjs.org/docs/react-component.html#setstate ( setstate ) https://zh-hans.reactjs.org/docs/react-dom.html#finddomnode ( finddomnode ) 参考博客: https://itbilu.com/javascript/react/EkACBdqKe.html 1、设置状态:setState(在组件中调用) (1)格式 setState (updater [ , callback ] ) 参数说明: updater,将要设置的新状态,该状态会和当前的 state 合并。 callback,可选参数,回调函数。该函数会在setState设置成功,且组件重新渲染后调用。 合并updater和当前state,并重新渲染组件。setState是React事件处理函数中和请求回调函数中触发UI更新的主要方法。 (2)特性 1)会批量推迟更新   目的:提升性能;保持内部一致   原因:setState() 将组件state的更改排入队列,并通知React需要使用更新后的state重新渲染此组件及其子组件。但React 将 setState 视为请求,而不是立即更新组件的命令;   隐患:React 并不会保证 state

ES6

时光毁灭记忆、已成空白 提交于 2019-12-01 07:06:21
ES6的特性比较多,在这里列举几个常用的: 类class 熟悉java等面向对象语言的开发者肯定都十分了解class,对于ES6来说,class就是个语法糖,只是让对象原型的写法变得更加简单和易于理解,我这里就不展开了。 模块化Module 模块的功能主要由export和import组成,每个模块都有自己单独的作用域,模块之间的相互调用关系是通过export来规定模块对外暴露的接口,通过import来引用其他模块提供的接口,同时还为模块创造了命名空间,防止函数的命名冲突。 导出变量:export var name='xxx' 导出常量:export const age='xx' 导出多个变量:export {name,age} 导出函数:export function 导入:import {xxx} from 'xxx' 块级作用域 使用var定义的变量为函数级作用域 使用let和const定义的变量为块级作用域 模板字符串 模板字符串使得字符串的拼接更加的简洁、直观 用反引号包裹字符串,变量放在${}中 //不使用模板字符串 var name='your name is'+first+'.' //使用模板字符串 var name=`your name is ${first}.` Promise promise是异步编程的一种解决方案,比传统的回调函数和事件更加合理和强大。简单来说

django的信号

自作多情 提交于 2019-12-01 05:39:21
django的信号 Django中提供了“信号调度”,用于在框架执行操作时解耦。通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者。 Django提供一种信号机制。其实就是观察者模式,又叫发布-订阅(Publish/Subscribe) 。当发生一些动作的时候,发出信号,然后监听了这个信号的函数就会执行。 1. Django内置信号 Model signals pre_init # django的model执行其构造方法前,自动触发 post_init # django的model执行其构造方法后,自动触发 pre_save # django的model对象保存前,自动触发 post_save # django的model对象保存后,自动触发 pre_delete # django的model对象删除前,自动触发 post_delete # django的model对象删除后,自动触发 m2m_changed # django的model中使用m2m字段操作第三张表(add,remove,clear)前后,自动触发 class_prepared # 程序启动时,检测已注册的app中modal类,对于每一个类,自动触发 Management signals pre_migrate # 执行migrate命令前,自动触发 post_migrate #

jQuery源码分析(九) 异步队列模块 Deferred 详解

我与影子孤独终老i 提交于 2019-12-01 05:21:07
deferred对象就是jQuery的回调函数解决方案,它解决了如何处理耗时操作的问题,比如一些Ajax操作,动画操作等。(P.s:紧跟上一节:https://www.cnblogs.com/greatdesert/p/11433365.html的内容) 异步队列有三种状态:待定(pending)、成功(resolved)和失败(rejected),初始时处于pending状态 我们可以使用jQuery.Deferred创建一个异步队列,返回一个对象,该对象含有如下操作:   done(fn/arr)         ;添加成功回调函数,当异步队列处于成功状态时被调用,参数同:jQuery.Callbacks(flags).add(fn/arr)   fail(fn/arr)         ;添加失败回调函数,参数同上   progress(fn/arr)      ;添加消息回调函数,参数同上   then(donefn/arr,failfn/arr,profn/arr) ;同时添加成功回调函数、失败回调函数和消息回调函数   always(fn/arr)        ;添加回调函数到doneList和failList中,即保存两份引用,当异步队列处于成功或失败状态时被调用 ;参数可以是函数、函数列表   state()        ;返回异步队列的当前状态

同步、异步、回调函数面试经典问题

有些话、适合烂在心里 提交于 2019-12-01 04:29:49
1、首先需要记住的是这么一句话 同步先行==》异步靠边=》回调垫底 <script> var a = new Promise(function () { console.log(1); setTimeout(() => consoel.log(2), 0); console.log(3); console.log(4); resolve(true); }) a.then(v => { console.log(8) }); var b = new Promise(function () { console.log(5); setTimeout(() => console.log(6), 0); }); console.log(7); </script> 上面这道题打印的顺序是什么? 首先来分析一下:还是那句话 同步先行==》异步靠边=》回调垫底 Promise是一个异步操作,是指的是then(),catch()方法,内部的代码还是同步的! 1.进入a的promise函数里面先打印1,遇到setTimeout回调垫底,扔到消息队列中排队等候 2.打印为134,遇到异步的 resolve(true) 靠边,因为同步还没有执行完毕 3.进入b的promise函数里面,打印5,遇到setTimeout回调垫底,扔到消息队列中排队等候 4.bpromise出来之后打印7,然后打印异步8

ES6——Promise

僤鯓⒐⒋嵵緔 提交于 2019-12-01 02:43:33
异步和同步 异步,操作之间没有关系,同时执行多个操作, 代码复杂 同步,同时只能做一件事,代码简单 Promise 对象 用同步的方式来书写异步代码 Promise 让异步操作写起来,像在写同步操作的流程,不必一层层地嵌套回调函数 改善了可读性,对于多层嵌套的回调函数很方便 充当异步操作与回调函数之间的中介,使得异步操作具备同步操作的接口 Promise 也是一个构造函数 接受一个回调函数f1作为参数,f1里面是异步操作的代码 返回的p1就是一个 Promise 实例 所有异步任务都返回一个 Promise 实例 Promise 实例有一个then方法,用来指定下一步的回调函数 let p1 = new Promise(function(resolve, reject){ // 异步代码 resolve 成功了 reject 失败了 // $.ajax() 执行异步 AJAX 请求 $.ajax({ url: '10-arr.txt', //规定发送请求的 URL。默认是当前页面。 dataType:'json',//预期的服务器响应的数据类型。 success(arr){ resolve(arr); }, error(err){ reject(err); } }) }); p1.then(function(arr){ console.log('成功了'+arr); }

action通信机制

女生的网名这么多〃 提交于 2019-11-30 23:14:05
#include <ros/ros.h> #include <actionlib/server/simple_action_server.h> #include "learning_communication/DoDishesAction.h" typedef actionlib::SimpleActionServer<learning_communication::DoDishesAction> Server; // 收到action的goal后调用该回调函数 void execute(const learning_communication::DoDishesGoalConstPtr& goal, Server* as) { ros::Rate r(1); learning_communication::DoDishesFeedback feedback; ROS_INFO("Dishwasher %d is working.", goal->dishwasher_id); // 假设洗盘子的进度,并且按照1hz的频率发布进度feedback for(int i=1; i<=10; i++) { feedback.percent_complete = i * 10; as->publishFeedback(feedback); r.sleep(); } //

PHP 数组函数大全

若如初见. 提交于 2019-11-30 20:51:39
PHP数组函数是核心的一部分。无需安装即可使用这些函数 函数名称 描述 array_change_key_case 将数组中的所有键名修改为全大写或小写 array_chunk 将一个数组分割成多个 array_column 返回数组中指定的一列 array_combine 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值 array_count_values 统计数组中所有的值 array_diff_assoc 带索引检查计算数组的差集 array_diff_key 使用键名比较计算数组的差集 array_diff_uassoc 用用户提供的回调函数做索引检查来计算数组的差集 array_diff_ukey 用回调函数对键名比较计算数组的差集 array_diff 计算数组的差集 array_fill_keys 使用指定的键和值填充数组 array_fill 用给定的值填充数组 array_filter 用回调函数过滤数组中的单元 array_flip 交换数组中的键和值 array_intersect_assoc 带索引检查计算数组的交集 array_intersect_key 使用键名比较计算数组的交集 array_intersect_uassoc 带索引检查计算数组的交集,用回调函数比较索引 array_intersect_ukey

OpenCV-Python 鼠标作画 | 八

依然范特西╮ 提交于 2019-11-30 20:00:34
目标 了解如何在OpenCV中处理鼠标事件 您将学习以下功能: cv.setMouseCallback() 简单演示 在这里,我们创建一个简单的应用程序,无论我们在哪里双击它,都可以在图像上绘制一个圆。 首先,我们创建一个鼠标回调函数,该函数在发生鼠标事件时执行。鼠标事件可以是与鼠标相关的任何事物,例如左键按下,左键按下,左键双击等。它为我们提供了每个鼠标事件的坐标(x,y)。通过此活动和地点,我们可以做任何我们喜欢的事情。要列出所有可用的可用事件,请在Python终端中运行以下代码: import cv2 as cv events = [i for i in dir(cv) if 'EVENT' in i] print( events ) 创建鼠标回调函数具有特定的格式,该格式在所有地方都相同。它仅在功能上有所不同。因此,我们的鼠标回调函数可以做一件事,在我们双击的地方绘制一个圆圈。因此,请参见下面的代码。代码在注释中是不言自明的: import numpy as np import cv2 as cv # 鼠标回调函数 def draw_circle(event,x,y,flags,param): if event == cv.EVENT_LBUTTONDBLCLK: cv.circle(img,(x,y),100,(255,0,0),-1) # 创建一个黑色的图像,一个窗口

OpenCV-Python 鼠标作画 | 八

谁都会走 提交于 2019-11-30 19:59:39
目标 了解如何在OpenCV中处理鼠标事件 您将学习以下功能: cv.setMouseCallback() 简单演示 在这里,我们创建一个简单的应用程序,无论我们在哪里双击它,都可以在图像上绘制一个圆。 首先,我们创建一个鼠标回调函数,该函数在发生鼠标事件时执行。鼠标事件可以是与鼠标相关的任何事物,例如左键按下,左键按下,左键双击等。它为我们提供了每个鼠标事件的坐标(x,y)。通过此活动和地点,我们可以做任何我们喜欢的事情。要列出所有可用的可用事件,请在Python终端中运行以下代码: import cv2 as cv events = [i for i in dir(cv) if 'EVENT' in i] print( events ) 创建鼠标回调函数具有特定的格式,该格式在所有地方都相同。它仅在功能上有所不同。因此,我们的鼠标回调函数可以做一件事,在我们双击的地方绘制一个圆圈。因此,请参见下面的代码。代码在注释中是不言自明的: import numpy as np import cv2 as cv # 鼠标回调函数 def draw_circle(event,x,y,flags,param): if event == cv.EVENT_LBUTTONDBLCLK: cv.circle(img,(x,y),100,(255,0,0),-1) # 创建一个黑色的图像,一个窗口