33
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【React】 useStateで配列を保存するときの注意点

Last updated at Posted at 2020-05-30

useStateで配列を保存する時は、
新しい配列を生成して保存しないと再描画されません。

サンプルコード

×: 再描画されない

const [value, setValue] = React.useState(null)

value.push(props.newValue)

setValue(value) 

○: 再描画される

const [value, setValue] = React.useState(null)

setValue([...value, props.newValue])

理由

Reactではstateの値が変化した時にコンポーネントが再描画されます。

stateの値の変化を、Object.is() で判定しているとのことです。なので、pushspliceでは前回と同じ値と判定されるそうです。

そのため、再描画が起きないので、[...array, props.newValue] などで値をコピーした新しい配列を生成してstateに保存すると再描画されます。

参考

おまけ

新しい配列を生成する以外にも、immutable.jsというのを使っても解決できるそうです。

2023/3/10: 追記、上記の内容は オブジェクトでも同様です。

33
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?