美文网首页
引用类对象的拷贝

引用类对象的拷贝

作者: 哎乌勒 | 来源:发表于2019-04-09 14:38 被阅读0次

    问题:

    handleSelectRows = (rows,int) => {
        const { dispatch,disease:{DSdata,selectDiseaseRows,DSNoData} } = this.props;
        if (int===0) {
          dispatch({
            type: 'disease/setStates',
            payload:{
              selectDiseaseRows:selectDiseaseRows.length===0?rows:selectDiseaseRows.concat(rows),
              DSNoData:DSNoData.length===0?rows:DSNoData.concat(rows)
            },
          });
    

    开始是直接将数组复制给selectDiseaseRows和DSNoData,在对selectDiseaseRows中的元素进行改变时,DSNoData中的元素也在变化,所以判断出,是因为数组是引用类型,直接复制其实是复制的“指针”

    解决:

    handleSelectRows = (rows,int) => {
        const { dispatch,disease:{DSdata,selectDiseaseRows,DSNoData} } = this.props;
        if (int===0) {
          const row=rows.map(i=>{return{...i}})
          const row2=rows.map(i=>{return{...i}});
          dispatch({
            type: 'disease/setStates',
            payload:{
              selectDiseaseRows:selectDiseaseRows.length===0?row:selectDiseaseRows.concat(row),
              DSNoData:DSNoData.length===0?row2:DSNoData.concat(row2)
            },
          });
    

    1.slice(),浅拷贝,如果数组是[1,2,3]这样的就可以拷贝,如果数组是[{a:1},{a"2}],数组里是object,拷贝还是复制的指针
    2.Object.assign(),也是浅拷贝

    最终解决方法,循环解构数组里的元素对象{...i},将它保存在另一个数组里,这样就不是拷贝的指针了

    相关文章

      网友评论

          本文标题:引用类对象的拷贝

          本文链接:https://www.haomeiwen.com/subject/vfbbiqtx.html