[解決済み] ReactのsetStateでオブジェクトを更新する
2022-03-26 19:24:53
質問
でオブジェクトのプロパティを更新することは可能でしょうか?
setState
?
のようなものです。
this.state = {
jasper: { name: 'jasper', age: 28 },
}
試してみました。
this.setState({jasper.name: 'someOtherName'});
とこれを
this.setState({jasper: {name: 'someothername'}})
最初のものはシンタックスエラーになり、2番目はただ何もしません。何かアイデアはありますか?
解決方法は?
状態の更新は
非同期処理
というように、状態オブジェクトを更新するために
アップデータ機能
と
setState
.
1- 最もシンプルなもの。
のコピーを作成します。
jasper
で、その中で変更を行います。
this.setState(prevState => {
let jasper = Object.assign({}, prevState.jasper); // creating copy of state variable jasper
jasper.name = 'someothername'; // update the name property, assign a new value
return { jasper }; // return new object jasper object
})
を使う代わりに
Object.assign
のように書くこともできます。
let jasper = { ...prevState.jasper };
2- 使用方法 拡散構文 :
this.setState(prevState => ({
jasper: { // object that we want to update
...prevState.jasper, // keep all other key-value pairs
name: 'something' // update the value of specific key
}
}))
注
Object.assign
と
Spread Operator
のみが作成されます。
シャローコピー
そのため、ネストしたオブジェクトやオブジェクトの配列が定義されている場合は、別のアプローチが必要になります。
ネストされたステートオブジェクトを更新する。
というようにstateを定義したとします。
this.state = {
food: {
sandwich: {
capsicum: true,
crackers: true,
mayonnaise: true
},
pizza: {
jalapeno: true,
extraCheese: false
}
}
}
pizzaオブジェクトのextraCheeseを更新する。
this.setState(prevState => ({
food: {
...prevState.food, // copy all other key-value pairs of food object
pizza: { // specific object of food object
...prevState.food.pizza, // copy all pizza key-value pairs
extraCheese: true // update value of specific key
}
}
}))
オブジェクトの配列を更新する。
ToDoアプリがあり、このフォームでデータを管理していると仮定しましょう。
this.state = {
todoItems: [
{
name: 'Learn React Basics',
status: 'pending'
}, {
name: 'Check Codebase',
status: 'pending'
}
]
}
ToDo オブジェクトの状態を更新するには、配列に対して map を実行し、各オブジェクトの一意な値をチェックします。
condition=true
であれば、更新された値を持つ新しいオブジェクトを返し、そうでなければ同じオブジェクトを返します。
let key = 2;
this.setState(prevState => ({
todoItems: prevState.todoItems.map(
el => el.key === key? { ...el, status: 'done' }: el
)
}))
提案します。 オブジェクトが一意な値を持たない場合、配列のインデックスを使用します。
関連
-
[解決済み】ReactJS: マテリアルuiのブレークポイントについて
-
[解決済み] ReactJS で inst.render が関数でないエラーが発生する
-
[解決済み] AxiosにCORSの問題が発生
-
[解決済み] ReactのsetStateで状態が更新されない
-
[解決済み] Reactルータを使ったプログラムによるナビゲーション
-
[解決済み] React JSX内のループ
-
[解決済み] Reactのこの3つの点は何をするところなのでしょうか?
-
[解決済み] React NativeとReactの違いは何ですか?
-
[解決済み] setStateを呼び出さずにReactコンポーネントを強制的に再レンダリングすることは可能ですか?
-
[解決済み】React:setStateを使用してstateのstate.item[1]を更新するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] エラー: 未定義のプロパティ 'map' を読み取ることができません。
-
[解決済み】無効な設定オブジェクトです。APIスキーマと一致しない設定オブジェクトを使用してWebpackが初期化されました。
-
[解決済み】Reactコンポーネント内でswitchステートメントを使用するには?
-
[解決済み] ReactJS: Warning: setState(...): 既存の状態遷移の間に更新することはできません
-
[解決済み] sh: react-scripts: npm start の実行後にコマンドが見つからない。
-
[解決済み] Webpack のコンパイルに失敗した
-
[解決済み] react.jsでng-ifに相当するものは何ですか?
-
[解決済み] プロップ `history` は `Router` で必須とマークされているが、その値は `undefined` である。
-
[解決済み】React Hooks useState()でオブジェクトを使用する。
-
[解決済み] ネストしたオブジェクトのプロパティを動的に設定する