1、介绍Redux,主要解决什么问题
介绍redux:
官方解释:Redux是JavaScript状态容器,提供可预测化的状态管理,
个人认为:redux是为解决react组件间通信和组件间状态共享而提出的一种解决方案,主要包括3个部分
store+action+reducer
store:用来存储当前react状态机(state)的对象,connect后,store的改变就会驱动react的生命周期
循环,从而驱动页面状态的改变
action: 用于接受state的改变命令,是改变state的唯一途径和入口。一般使用时在当前组件里面调用相关的 action方法,通常把和后端的通信(ajax)函数放在这里
reducer: action的处理器,用于修改store中state的值,返回一个新的state值
主要解决什么问题:
1、组件间通信
由于connect后,各connect组件是共享store的,所以各组件可以通过store来进行数据通信,当然这里必须遵守redux的一些规范,比如遵守 view -> aciton -> reducer的改变state的路径
2、通过对象驱动组件进入生命周期
对于一个react组件来说,只能对自己的state改变驱动自己的生命周期,或者通过外部传入的props进行驱动。通过redux,可以通过store中改变的state,来驱动组件进行update
3、方便进行数据管理和切片
redux通过对store的管理和控制,可以很方便的实现页面状态的管理和切片。通过切片的操作,可以轻松的实现redo之类的操作
2、表单可以跨域吗
form表单提交没有跨域问题,但ajax提交有跨域问题
3、promise与async await的区别
4、请求性能优化之防抖与节流
防抖(debounce):在函数需要频繁触发时,只有当有足够空闲的时间时,才执行一次。就好像在百度搜索时,每次输入之后都有联想词弹出,这个控制联想词的方法就不可能是输入框内容一改变就触发的,他一定是当你结束输入一段时间之后才会触发。
函数防抖:
function debounce(handle, delay) {
var timer = null;
return function() {
var _this = this,
_arg = arguments;
clearTimeout(timer);
timer = setTimeout(function() {
handle.apply(_this, _arg);
}, delay);
}
} /
函数节流
节流(thorttle):预定一个函数只有在大于等于执行周期时才执行,周期内调用不执行。就好像你在淘宝抢购某一件限量热卖商品时,你不断点刷新点购买,可是总有一段时间你点上是没有效果,这里就用到了节流,就是怕点的太快导致系统出现bug。
区别:在发生持续触发事件时,防抖设置事件延迟并在空闲时间去触发事件,而节流则是隔一定的时间触发一次。
函数节流运用的实际场景有:窗口调整,页面滚动,抢购疯狂点击等等。
/*
节流函数
handle:调用的函数
wait:等待时间(毫秒)
*/
function throttle(handle, wait) {
var lastTime = 0;
return function () {
//new Date().getTime()从1970到当前所过去的时间(毫秒)
var nowTime = new Date().getTime();
//时间差大于等于等待时间,就去执行函数
if (nowTime - lastTime >= wait) {
handle.apply(this, arguments);
lastTime = nowTime;
}
}
}
5、搜索请求中文如何请求
前台需要对中文参数进行编码,调用js方法encodeURI(url),将url编码,然后请求
6、通过什么做到并发请求
用Promise,有Promise.all