crm踩坑記(三)

React

如何同步更新state

因爲setState方法是異步的,而一般不少時候在一個生命週期裏更新state後須要在另外一個生命週期裏使用這個state。前端

下面介紹幾個方法node

// 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())react

mongoose: virtual populate

在使用mongoose進行表關聯查詢的時候,我將查詢出來的數據在後端打印出來,可是發現打印不出來任何東西。ios

我還覺得是代碼寫錯了,應該一番資料的查閱,瞭解到真實的狀況是這樣的: "經過virual查詢出來的數據,打印出來是沒法看見的,由於它的類型是***(我也不知道)的,須要將它轉換爲對象,才能夠打印出來"。git

一樣,還有一個地方須要注意:es6

經過virtual查詢出來的數據,若是不對結果進行操做,那麼返回到前端的數據就是"_doc", 可是若是要對查詢的結果進行操做,此時操做的數據不是"_doc", 而是整個對象, 所以須要過濾一次(const docs = results.map(x => x._doc))。github

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

單從代碼的整潔度來說,這是一個很不錯的方式。mongodb

// 只是簡單的舉例
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()shell

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

相關文章
相關標籤/搜索