最近發現的一個bug讓我從react框架角度重新複習了一遍淺拷貝與深拷貝。
淺拷貝,就是兩個變數都是指向一個地址,改變了一個變數,那另一個變數也隨之改變。這就是淺拷貝帶來的副作用,兩個變數會相互影響到,因為它們指向同一個地址。
深拷貝,就是互相獨立,指向的是不同的地址,一個變數改變了,另一個變數不會被影響到。
react角度:
父元件傳給子元件的attr,在子元件通過props.attr直接複製給childAttr,這就是淺拷貝,父元件的attr與子元件的childAttr指向同一個地址,在子元件中改變childAttr,那麼父元件中的attr也會隨之改變。這時再將attr傳入這個子元件,attr的值就是被改變之後的值。所以要想資料來源頭attr不會被改變,這時就需要在父元件中深拷貝attr,然後再一一傳入子元件;或者在子元件中將props.attr深拷貝給childAttr。
對於陣列的淺拷貝與深拷貝的資料格式:
淺拷貝: newArray = array
深拷貝: newArray = _.map(array, (a) => { return a })