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, 我知道这是什么意思, 就是不太好表达出来。

对象取值兼容

由于经常涉及到需要取对象的某某属性值,但是该对象可能不存在某某值,因此就会导致报错。故一般使用的办法有两个:

  1. 使用loadsh库。
  2. 做兼容。如下:
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踩坑记(三)的更多相关文章

  1. crm踩坑记(二)

    Linux tmux 如何查看 tmux如何进行滚动呢? prefix + [, prefix为tmux的前置动作,默认是ctrl + b. 使用方向键或者pageUp来进行翻页. q可以退出滚动模式 ...

  2. 【React踩坑记三】React项目报错Can't perform a React state update on an unmounted component

    意思为:我们不能在组件销毁后设置state,防止出现内存泄漏的情况 分析出现问题的原因: 我这里在组件加载完成的钩子函数里调用了一个EventBus的异步方法,如果监听到异步方法,则会更新state中 ...

  3. crm踩坑记(一)

    目录 antd es6 Object.entries() Object.keys() Object.getOwnPropertyNames() 很神奇的用法!!! eslint 傻逼 其他 参考 an ...

  4. 【React踩坑记三】React项目报错Can't perform a React state update on an unmounted component

    意思为:我们不能在组件销毁后设置state,防止出现内存泄漏的情况 分析出现问题的原因: 我这里在组件加载完成的钩子函数里调用了一个EventBus的异步方法,如果监听到异步方法,则会更新state中 ...

  5. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  6. Spark踩坑记——从RDD看集群调度

    [TOC] 前言 在Spark的使用中,性能的调优配置过程中,查阅了很多资料,之前自己总结过两篇小博文Spark踩坑记--初试和Spark踩坑记--数据库(Hbase+Mysql),第一篇概况的归纳了 ...

  7. EOS踩坑记

    [EOS踩坑记] 1.每个account只能更新自己的contract,即使两个account的秘钥相同,也不允许. 如下,使用alice的权限来更新james的contract.会返回 Missin ...

  8. Spark踩坑记:Spark Streaming+kafka应用及调优

    前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark streaming从k ...

  9. Vue + TypeScript + Element 搭建简洁时尚的博客网站及踩坑记

    前言 本文讲解如何在 Vue 项目中使用 TypeScript 来搭建并开发项目,并在此过程中踩过的坑 . TypeScript 具有类型系统,且是 JavaScript 的超集,TypeScript ...

随机推荐

  1. 2715:谁拿了最多奖学金-poj

    总时间限制:  1000ms 内存限制:  65536kB 描述 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 1) 院士奖学金,每人8000元,期末平均成 ...

  2. 51Nod--1018排序

    1018 排序 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 给出N个整数,对着N个整数进行排序 Input 第1行:整数的数量N(1 <= N  ...

  3. C# 通过反射初探ORM框架的实现原理

    背景: 以前学的Java进行开发,多用到Mybatis,Hiberante等ORM框架,最近需要上手一个C#的项目,由于不是特别难,也不想再去学习C#的ORM框架,所以就想着用反射简单的实现一下ORM ...

  4. HttpClient(一)HttpClient抓取网页基本信息

    一.HttpClient简介 HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包, 并且它支 ...

  5. Jarvis OJ - [XMAN]level0 - Writeup

    差不多最简单的pwn了吧,不过本菜鸟还是要发出来镇楼 分析一下,checksec 查看程序的各种保护机制 没有金丝雀,没有pie 执行时输出Hello,World,在进行输入,溢出嘛  开工 丢到id ...

  6. ZOJ 2859 二维RMQ(模板)

    这题求范围最小值,RMQ正好是用来解决这方面的.所以再适合只是了,又是离线静态输入输出的,所以时间比二维线段树快. #include<iostream> #include<cstdi ...

  7. iOS旋钮动画-CircleKnob

    欢迎相同喜欢动效的project师/UI设计师/产品添加我们 iOS动效特攻队–>QQ群:547897182 iOS动效特攻队–>熊熊:648070256 前段时间和群里的一个设计师配合. ...

  8. centos yum安装ffmpeg

    ffmpeg是一个重要的应用软件,用于执行与视频文件转换成不同的视频流格式的视频站点,能够安装在linux系统上来使用 (一)安装编译环境  #yum install -y automake auto ...

  9. PHP中被忽略的性能优化利器:生成器

    如果是做Python或者其他语言的小伙伴,对于生成器应该不陌生.但很多PHP开发者或许都不知道生成器这个功能,可能是因为生成器是PHP 5.5.0才引入的功能,也可以是生成器作用不是很明显.但是,生成 ...

  10. Shiro学习(一)总体介绍

    1.1  简介 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Securi ...