更新React 中的巢狀狀態
在React 應用程式的上下文中,您可能會遇到需要更新特定屬性的情況深度嵌套的狀態物件。其中一個場景是建立使用者可以定義欄位並指定各種詳細資訊的表單。
場景:
您有一個表示表單欄位的初始狀態對象,其中每個欄位欄位由鍵標識,並具有 name 和 populate_at 等屬性。您希望允許使用者在與表單控制項互動時修改這些屬性。
挑戰:
針對要在狀態中更新的特定物件可能具有挑戰性,尤其是使用巢狀物件時。
解決方案:
要更新state.item[1].name,可以使用以下步驟:
1.製作狀態物件的淺表副本:
<code class="javascript">let items = [...this.state.items];</code>
2.建立要更新的特定項目的淺表副本:
<code class="javascript">let item = {...items[1]};</code>
3 .替換副本中所需的屬性:
<code class="javascript">item.name = 'newName';</code>
4.將更新後的項目放回狀態物件的副本中:
<code class="javascript">items[1] = item;</code>
5.將狀態設定為修改後的副本:
<code class="javascript">this.setState({items});</code>
或者,您可以將步驟2 和3 合併到一行中:
<code class="javascript">let item = {...items[1], name: 'newName'};</code>
單行解決方案:
以下是如何使用陣列擴充運算子在一行中執行整個更新:
<code class="javascript">this.setState(({items}) => ({ items: [ ...items.slice(0, 1), { ...items[1], name: 'newName', }, ...items.slice(2) ] }));</code>
注意:
注意:它是需要注意的是,範例中的狀態物件是使用普通物件建構的。在現代 React 應用程式中,建議使用 useState hook 或 Redux 進行狀態管理。以上是如何在 React 中更新巢狀狀態:逐步指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!