在REACT项目中给document.title 加名称
- 这是一个二次开发的项目用DVA做的,我实在全局的MODELS文件夹中的 global.js
中的subscriptions 来监听全局的路由变化
switch (pathname) {
case '/index':
setTimeout(() => {
document.title = '数据采集与存储系统'
});
break;
}
- 这里大家可能会有些问题,加setTimenout 干啥,我在DEBUGGER的过程中,如果不加setTimeout 的话他会 在跳转页面之前就把TITLE给改了,我所以我用到了异步,来处理这个问题,因为JS是单线程的,其实是他的 主线程是单线程的,所以先让他把路由跳转过去,在修改页面的标题,这样就可以了,这在往深一点挖就是 事件循环机制:微任务(Micro task)和宏任务(Macro task)
递归的问题
- 在我拿到相应的参数的时候,点击按钮,发请求,去服务器请求数据,如果超过了40s,后台的的nginx配置 就会给我返回504的的状态码,我一开始还挺纳闷,他这显示个报错504xxxx,我咋拿到,在我请教我大哥之后 我发现,debugger, 过程中,原来还可以在控制台直接数据想要的参数,这太方便了,原谅我的无知 之后我就 输入 res.response ,数据就出来了,如果是504的话就循环调用从服务器拿数据,大概四五分钟左右感觉时 间有点漫长,期间还有一个问题,就是他后台返回了数据,我前台还是504,我表示一脸懵逼,后来发现我训练 出来的数据nainx504时间比给我返回数据的时间快,后来,才把时间设置成了40s,真坑,对于优化时间来说, 这是他算法的问题,运行的慢,我咋改,现在一想,我前端能做的,撑死再给它弄个动态规划,缓存中间结果, 利用空间换时间,在这个问题上,一开始我们不要想着怎么去优化什么的,第一要务还是要完成领导交给的任务, 慢慢成长呗,然后让自己变得更强,在做项目的过程中,就把代码写的完美一些!!!
状态码的问题
-
报500不一定是后台的问题,报200也不一定是前台的问题
-
当你报400表示懵逼的时候,可能是没商量好传递的字符格式
-
500:可能是proxy代理不稳定,封装的FETCH或者AXIOS有问题,之前让我上传的类型是 "multipart/form-data" 死活发请求发不成功,但是人家POSTMAN测试就是200,你说气不气,不过感觉这个 上传的类型很古老了,也不知道 为啥这给我这个上传方式X-WWW-url-encoded 不香嘛,后台发现,还想得具体配置一些FORM-DATA的东西,果断放弃 后来用了dev中的request的方式解决了问题
-
200:可能是接口路径不对
-
我好像还遇到过前端报500,后台测试一直200.像这种问题,前端就把字段都写死像:
xxx:111 直接传递,如果这样成功了,一般都是后台的问题了,后台发现果真是后台的问题,哈哈
toFixed:保留两位小数之后还会显示多余的数字
let val = 213.435345345;
val.toFixed(4)*100====>21343.530000000002 "错误格式"
(val*100).toFixed(4)===>“正确格式”
从这一问题中,我能想到的就是JavaScript的优先级的问题,详情请看MDN
REACT中的THIS问题
箭头函数中也没有自己的THIS和ARGUMENTS
THIS:常见的几种情况
- 1.构造函数中的THIS是当前类的一个实例
- 2.点前面是谁THIS就是谁,没有点THIS就是WINDOW
- 3.严格模式下,在函数中THIS是 UNDEFINED
- 4.我们可以用CALL、APPLY、BIND改变THIS的指向
JS值的传递
- 一种是按引入值传递,一种是按值传递,在vue项目中,父组件给子组件传递一个 对象,子组件接收到,然后没有JSON.parse(JSON.stringif(obj)),解决没有实施 更新的问题
关于PROMISE的问题
- 比如:在promise成功的回调当中,再次发异步接口,不断点击确定确定按钮,隔一会才能拿到数据 是因为不一定是按顺序执行的,因为不知道那个先执行 解决方案:直接return xxx() 这个方法出去即可,获取,用生成器函数,这再往深一点挖就是微任务和 宏任务的底层原理了,在此期间,我一开始想不出解决方案,想用localstorage解决问题,因为localS torage是同步的嘛,但是,我没有想,倒是还是那个 then 方法先执行
**moment时间问题 **
if(moment().format() < moment('2020-10-11 18:00:00').format()){
this.timer = setInterval(()=>{
let now = moment()
let end = moment('2020-10-11 18:00:00')
console.log(now,end,end-now,999)
let tempTime = moment.duration(end-now);
this.countdown = `${tempTime.get('day')} d
${tempTime.get('hours')} h
${tempTime.get('minutes')} m
${tempTime.get('seconds')} s`
if(tempTime<=0){
clearInterval(this.timer)
this.countdown=''
}
},1000)
}