crm踩坑记(三)
React
如何同步更新state
由于setState方法是异步的,而通常很多时候在一个生命周期里更新state后需要在另一个生命周期里使用这个state。
下面介绍几个方法
// 1
this.setState({}, () => {
this.doSomething();
});
doSomething() {
console.log(this.state);
}
// 2 使用setState
// 其他
this.setState((prevState, props) => {
return { counter: prevState.counter + 1 };
});
mongodb
Object_id
由于Object_id是对象,因此在比较的时候一定不能直接比较两个ID是否相等,即不能if (a == b), 通过查阅官方的文档,了解到可以这样用: if (a.toString() === b.toString())
mongoose: virtual populate
在使用mongoose进行表关联查询的时候,我将查询出来的数据在后端打印出来,但是发现打印不出来任何东西。
我还以为是代码写错了,应该一番资料的查阅,了解到真实的情况是这样的: "通过virual查询出来的数据,打印出来是无法看见的,因为它的类型是***(我也不知道)的,需要将它转换为对象,才可以打印出来"。
同样,还有一个地方需要注意:
通过virtual查询出来的数据,如果不对结果进行操作,那么返回到前端的数据就是"_doc", 但是如果要对查询的结果进行操作,此时操作的数据不是"_doc", 而是整个对象, 因此需要过滤一次(const docs = results.map(x => x._doc))。
mongodb shell导出到csv
mongoexport --host localhost --db seed_crm --collection customers --type=csv --out customer.csv --fields firstname,middlenamae,lastname
node
axios与hapi.js结合使用
// get
axios.get('/xx', {
params: {
a,
b,
c,
},
});
// schema
function xx() {
return {
query: {
a: Joi....
}
};
}
// post
axios.post('/xx', {
a,
b,
c,
});
// schema
function xx() {
return {
payload: {
a: Joi
}
};
}
代码技巧
forEach+if+push ===> filter+concat
单从代码的整洁度来讲,这是一个很不错的方式。
// 只是简单的举例
let results = [];
const data = [1, 1, 2, 2, 3, 3];
data.forEach(x => {
if (x === 2) {
results.push(x);
}
});
// to this
let results = [];
const data = [1, 1, 2, 2, 3, 3];
results = results.concat(data.filter(x => x === 2));
Promise await
超过2个await建议使用Promise.all()
ES6解构
const value1 = values[0];
const value2 = values[1];
// to this, 数组的解构
const [value1, value2] = values;
数组的几个方法
对于数组的几个常见的方法,要使用return null 或者 return false, 我知道这是什么意思, 就是不太好表达出来。
对象取值兼容
由于经常涉及到需要取对象的某某属性值,但是该对象可能不存在某某值,因此就会导致报错。故一般使用的办法有两个:
- 使用loadsh库。
- 做兼容。如下:
const defaultBy = (Person || {}).default;
// 或者这样的
const defaultBy = Person.default || '';
find
多使用ES6里面的find方法,很好用的。
坑
mongoose
在mongoose的model里面没有某个字段,因为需求,需要向数据库里插入某个字段。然后查询数据打印出来,可以看见这个数据,但是在使用的时候,它的值都是undefined, 后来才知道,这是mongoose的一个机制,需要在schame里面,将直接插入的那个字段给加上。
Promise.resolve
resolve函数里面只能跟一个值,如果要resolve多个值,需要用对象包裹起来。
Promise.all
Promise.all需要所有的Promise都resolve或者reject, 如果只有一部分完成了这两个操作,那么是会出问题的。
React数据传递
x={true} 与 x="true"在子组件里,得到的数据结果是不一样的。
请看这里: JSX Boolean
crm踩坑记(三)的更多相关文章
- crm踩坑记(二)
Linux tmux 如何查看 tmux如何进行滚动呢? prefix + [, prefix为tmux的前置动作,默认是ctrl + b. 使用方向键或者pageUp来进行翻页. q可以退出滚动模式 ...
- 【React踩坑记三】React项目报错Can't perform a React state update on an unmounted component
意思为:我们不能在组件销毁后设置state,防止出现内存泄漏的情况 分析出现问题的原因: 我这里在组件加载完成的钩子函数里调用了一个EventBus的异步方法,如果监听到异步方法,则会更新state中 ...
- crm踩坑记(一)
目录 antd es6 Object.entries() Object.keys() Object.getOwnPropertyNames() 很神奇的用法!!! eslint 傻逼 其他 参考 an ...
- 【React踩坑记三】React项目报错Can't perform a React state update on an unmounted component
意思为:我们不能在组件销毁后设置state,防止出现内存泄漏的情况 分析出现问题的原因: 我这里在组件加载完成的钩子函数里调用了一个EventBus的异步方法,如果监听到异步方法,则会更新state中 ...
- Spark踩坑记——Spark Streaming+Kafka
[TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...
- Spark踩坑记——从RDD看集群调度
[TOC] 前言 在Spark的使用中,性能的调优配置过程中,查阅了很多资料,之前自己总结过两篇小博文Spark踩坑记--初试和Spark踩坑记--数据库(Hbase+Mysql),第一篇概况的归纳了 ...
- EOS踩坑记
[EOS踩坑记] 1.每个account只能更新自己的contract,即使两个account的秘钥相同,也不允许. 如下,使用alice的权限来更新james的contract.会返回 Missin ...
- Spark踩坑记:Spark Streaming+kafka应用及调优
前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark streaming从k ...
- Vue + TypeScript + Element 搭建简洁时尚的博客网站及踩坑记
前言 本文讲解如何在 Vue 项目中使用 TypeScript 来搭建并开发项目,并在此过程中踩过的坑 . TypeScript 具有类型系统,且是 JavaScript 的超集,TypeScript ...
随机推荐
- PHP命令空间namespace及use的用法实践总结
以下皆为本人自我理解内容,如有失误之处,请多多包涵. 文章大纲: 使用namespace的目的 namespace的使用方法 使用use的目的 use的使用方法 使用namespace的目的: 团队合 ...
- 使用sklearn进行数据挖掘-房价预测(5)—训练模型
使用sklearn进行数据挖掘系列文章: 1.使用sklearn进行数据挖掘-房价预测(1) 2.使用sklearn进行数据挖掘-房价预测(2)-划分测试集 3.使用sklearn进行数据挖掘-房价预 ...
- 【微软大法好】VS Tools for AI全攻略(3)
接着上文,现在我们需要一种穷人的方法来搭建好Azure虚拟机. 思路很简单,因为AI组件的原理其实是传送了script文件和命令上去,那么我们这个虚拟机只要做好了所有的配置,那么我们就可以将它当作深度 ...
- 你绝不能错过的效率神器 —— Alfred
文章首发于[博客园-陈树义],点击跳转到原文<你绝不能错过的效率神器 -- Alfred> Alfred 是 Mac 系统上一款专注于效率提升的著名应用,它能帮你快速打开网页.快速进行自定 ...
- ABAP中的AMDP(ABAP-Managed Database Procedures )
ABAP管理下的数据库存储过程(ABAP-Managed Database Procedure,以下简称AMDP)是在APAP on SAP HANA开发中的一种优化模式.AMDP使用数据库语言书写, ...
- This package contains perl-5.16.3, java8, nifi-1.1.2 on ubuntu:14.04
[How to build:]cd /home/ops/work/demo/docker/aws/srctouch Dockerfiledocker build -t aws_src_image:v1 ...
- lunx命令2
测试网络 ping 查看ip ifconfig 关闭防火墙 iptables -F 干掉nginx进程 killall nginx 切换用户 su linux下连接另一台linux服务区 ssh ro ...
- Codeforces Round #436 (Div. 2)
http://codeforces.com/contest/864 第一次打cf的月赛-- A 题意:给你一个数列,问你能不能保证里面只有两种数且个数相等.2<=n<=100,1<= ...
- 一个js的动画,以前以为只有flash可以实现
11年刚干这行的时候,看到这种什么百叶窗的动画,以为都是flash实现的,最近突然灵光一闪,想到了用js实现(虽然我不是做前端的,本人做.net).代码虽然实现了,但是比较乱,先上个图: 代码主要就是 ...
- Hibernate常见问题 No row with the given identifier exists问题的解决办法及解决
(1)在学习Hibernate的时候遇到了这个问题"No row with the given identifier exists"在网上一搜看到非常多人也遇到过这个问题! 问题的 ...