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.

【JS】プロパティの値を破壊→非破壊処理にする方法。

Last updated at Posted at 2021-01-08

個人メモです。

テーブルでボタンクリックに合わせtdタグ、thタグを切り替える処理でバグが発生。

プロパティの値の変更の破壊処理を非破壊に変更したらバグが直ったので忘備録として。

破壊処理をデバッグで確認したが、処理は問題なく最終的なアウトプットがおかしい状況。(vue.jsの処理のせい??)

##対処方法

変数をコピーする必要がある。

オブジェクトの外側のデータをコピー
//修正前
this.innerValue = this.innerValue.map((tr, rowKey) => {


//修正後
this.innerValue = this.innerValue.map((tr, rowKey) => {
        const _tr = {...tr}

オブジェクトをスプレッド構文で展開してコピーする。

オブジェクトの内側のデータをコピー
//修正前
cell['item_type'] = 'TYPE_TH'
return cell


//修正後
return {
    ...cell,
    item_type: 'TYPE_TD'
}

変数の値を直接変更していたものを、スプレッド構文に展開(別データとしてコピー)して作成。


##コード
修正後
    changeRowTh(){
      this.innerValue = this.innerValue.map((tr, rowKey) => {
        const _tr = {...tr}
        if(rowKey === 0){
          _tr.article_items = _tr.article_items.map((cell, cellKey) => {
            return {
              ...cell,
              item_type: 'TYPE_TH',
            }
          })
        }else{
          _tr.article_items = _tr.article_items.map((cell, cellKey) => {
            return {
              ...cell,
              item_type: 'TYPE_TD'
            }
          })
        }
        return _tr
      })
    },
修正前
    changeRowTh(){
      this.innerValue = this.innerValue.map((tr, rowKey) => {
        if(rowKey === 0){
          tr.article_items = tr.article_items.map((cell, cellKey) => {
            cell['item_type'] = 'TYPE_TH'
            return cell
          })
        }else{
          tr.article_items = tr.article_items.map((cell, cellKey) => {
            cell['item_type'] = 'TYPE_TH'
            return cell
          })
        }
        return tr
      })
    },


プロジェクトのデザインパターンが破壊処理を使わない方針の場合、非破壊処理にするよう注意が必要。
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?