React之淺拷貝與深拷貝

yezi-dream發表於2018-04-01

       最近發現的一個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 }) 

 

相關文章