在React開發中遇到的問題 陣列引用賦值

2022-02-22 06:51:06 字數 1549 閱讀 7101

在react開發中遇到了乙個問題:

需求是在乙個選擇元件中選擇資料mydata陣列,確定後將mydata陣列返回到父元件,再次開啟該選擇元件時,從父元件獲取之前選擇的資料mydata並顯示為已選擇。

/* 開啟選擇元件 */

showmodal = () => );

const = this.props;

this.setstate();

console.log(this.state.mydata);

this.onchange();

}/* 確定-將data返回父元件 */

handleok = () => );

// 返回父元件data

this.props.getmydata();

} else

}/* 取消-不對data做操作 */

handlecancel = () => );

}/* 選擇data */

onchange = (mydata) => );

this.setstate();

}

大概流程如下:

經過一系列嘗試後發現,問題的原因在於陣列的表現形式就是記憶體中的一段連續的記憶體位址,陣列名稱其實就是連續記憶體位址的首位址。onchange中對mydatastate.mydata的改變會直接改變該陣列所指向的位址中的資料,而父元件中的mydata也是指向該陣列的,所以一旦state.mydata發生改變,即使不將改變後的mydata傳給父元件,父元件的mydata也會改變。

修改:給父元件傳值時使用中間變數,並且陣列賦值時,使用先結構再賦值的方式生成新的陣列。

/* 開啟選擇元件 */

showmodal = () => );

const = this.props;

this.setstate();

this.onchange();

}/* 確定-將data返回父元件 */

handleok = () => );

} else

}/* 取消-不對data做操作 */

handlecancel = () =>

/* 選擇data */

onchange = (mydata) => );

// 使用中間變數,不直接修改state.mydata

this.setstate();

}

總結:

在js中,

陣列和物件是位址型變數

陣列和物件是位址型變數

陣列和物件是位址型變數

基礎知識一定時刻記在腦子裡。。。

開發中遇到的問題

最後再一次單步除錯中發現 nsurl urlwithstring 返回的nsurl居然為nil。大概找到問題所在了,在網上查了如何解決獲取空的nsurl,大致方法如下 原因 nsurl urlwithstring 這個方法要求傳乙個字串型別的引數,引數如果有中文的話,得到的物件就是空。解決辦法 先把...

開發中遇到的問題

1 element框架 實現 固定寬度 動態寬度 固定寬度 三個中 誰最長總體高度就是誰 固定寬度 實現效果是2 element框架 實現 響應式布局 使用js動態生成width 並渲染 3 hash模式下共用乙個 頻繁切換tab導致出現 非同步問題 使用同乙個axios 引數不一樣 返回的結果不同...

react 開發中的問題簡記

1 什麼時候用props 什麼時候用state 不能使用props 當頁面元件存在url跳轉問題時候,原因 若單獨重新整理,他會報錯,拿不到前面的資料 使用props場景 當元件為頁面元件的一部分即沒有專有的url配置的時候可以使用。state 保持當前狀態請求一般都會放在state裡。2 開發中遇...