0
0

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 3 years have passed since last update.

setStateをちょっとだけ工夫した話

Posted at

最近PRレビューした中でこんな感じのstateがあった。


const start = type === 'start' ? argumentNumber : this.state.start;
const end = type === 'end'? argumentNumber : this.state.end;
this.setState({
 start,
 end,
 info: {
  hoge: 'textChanged'
 }
})

infoの中身は必ず変更されるけど、startとendはtypeによって変更有無が変わる。
なんかsetStateに不要な値入るの気持ち悪いと思いました。

let newState = {
 info: {
  hoge: 'textChanged'
 }
}
if (type === 'start') {
 newState = { ...newState, ...{ start: argumentNumber} }
} else {
 newState = { ...newState, ...{ end: argumentNumber } }
}
this.setState(newState)

こうしたほうが綺麗かも。
ただ変数の中身が動的に変化していくから、多用するとnewStateの中身がカオスになる。
できれば関数に分けたほうがメンテしやすそう。

function newPositionState(type) {
 if (type === 'start') {
  return { start: argumentNumber}
 } else {
  return { end: argumentNumber }
 }
}

let newState = {
 info: {
  hoge: 'textChanged'
 }
}

newState = { ...newState, newPositionState() }
this.setState(newState)

こうすれば読みやすい。
更新対象のstateが増えたとしても、特に問題なさそう。
もっといい方法があれば教えていただきたい。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?