Vue의 배열 변경이 반영되지 않습니다.

9032 단어 Vue.js배열

결국 하고 싶었던 일



트리 표시하여 선택한 데이터를 반영



공식 트리 샘플



htps // jp. 아 js. 오 rg/v2/에ぁmpぇs/t레에ゔぃ에w. HTML
사용하고 싶지 않아.
확실히 편하지만 아이 부품 손자 부품을 만들면
데이터의 버킷 릴레이가 되기 때문에 Vuex를 사용해야 되지 않을까. . . !
그래서 자식 구성 요소를 만들지 않고 노력했습니다.

해봤어



움직이지 않는다v-for에서 목록 렌더링하는 트리 구조 부분을 클릭해도 열고 닫지 않습니다.
그러나 클릭 이벤트는 데리러 데이터 변경은되고있다
배열이 リアクティブ가 아닙니다. . . .

배열 거동 검증


<template>
  <div>
    <ul>
      <li v-for="(item, index) in list" :key="index"> {{ item }} </li>
    </ul>
    {{ list }}
    <button @click="incrementArray">+1</button>
  </div>
</template>

<script>
export default {
  name: 'Sample',
  data() {
    return {
      list: [1, 2, 3, 4, 5]
    }
  },
  methods: {
    incrementArray() {
      this.list[0] = this.list[0] + 1;
      console.log(this.list);
    }
  }
}
</script>




아칸, 반영됩니다. . . 뭐야 이거. . .

그러나 콘솔 로그를 보면 값이 증가하고 있기 때문에
원인은 再描画されていない입니다.

조사한 참고가 되는 기사


  • (공식 문서) 목록 렌더링
  • (공식 문서) 리액티브 탐구
  • Vue.js의 data 속성에서 배열 변경을 splice로 바꿔라!

  • 요컨대
  • push()pop()shift()unshift()splice()sort()reverse()를 사용하면 변경을 감지하고 다시 그립니다! !
  • 보통으로 대입하면 검지하지 않아! !
  • 배열과 객체에서 요소를 늘리거나 줄일 때는 this.$set()를 사용하십시오! ! "

  • 알겠어

    수정해 나가기



    위 방법 헛되이 달려 강제 발화 패턴


    <script>
    export default {
      name: 'Sample',
      data() {
        return {
          list: [1, 2, 3, 4, 5]
        }
      },
      methods: {
        incrementArray() {
          this.list[0] = this.list[0] + 1;
          this.list.splice();
        }
      }
    }
    </script>
    
    


    오~

    겉보기에 좋지 않은 구현이지만
    표시하고 있는 배열에 변경은 없지만 다른 변수의 상태가 표시에 영향을 주는 경우는
    이렇게 할 수밖에 없을지도 모른다v-for에서 다른 변수를 v-show 또는 v-if에서 참조하는 경우
    this.list.push({});
    this.list.pop();
    

    토카
    this.list.unshift({});
    this.list.shift();
    

    나는 시도했다.
    강제 발화시킨 경우 splice()가 가장 빠릅니다.

    this.$set 을 사용하는 패턴


    <script>
    export default {
      name: 'Sample',
      data() {
        return {
          list: [1, 2, 3, 4, 5]
        }
      },
      methods: {
        incrementArray() {
          this.$set(this.list, 0, this.list[0] + 1);
        }
      }
    }
    </script>
    
    

    표시에 사용하는 데이터에 변경 사항을 직접 추가하는 것이 좋습니다.
    나머지는 위의 방법을 사용합니다.



    배열과 객체는 특별합니다.

    다음 번은 트리 표시한 체크 박스의 녀석의 기사에서도 씁니다
    떫지 않고 트리를 아이 컴퍼넌트화해 Vuex 데뷔할까. . .

    좋은 웹페이지 즐겨찾기