외부 라이브러리에서 정의되지 않은 속성을 추가할 때 Vue에서 변경 사항을 감지하지 못함
양식 렌더러를 만들려고 하는데 양식-콘텐츠 업데이트를 제대로 받는 데 문제가 있어.최소 버전으로 샌드박스를 만들었어: https://codesandbox.io/s/23z4y1n9kp
문제
양식에는 다음과 같은 세 가지 필드가 있다.a
,b
그리고c
. 에 대한 값으로 초기화된다.a
을 위한 것b
, 그러나 을 위한 것은 아니다.c
. 값을 업데이트할 때a
또는b
, 폼 콘텐트 업데이트도 보이고 콘솔에서 세터 방법이 정확한 값으로 호출되는 것을 본다.그러나 다음 값을 입력할 때c
, 페이지에서는 아무 일도 일어나지 않는 것처럼 보이지만, 콘솔은 세터가 올바르게 호출되었음을 나타낸다.이는 문서 개체가 올바르게 업데이트되었지만 Vue는 이를 알지 못한다는 것을 의미한다.
외부 라이브러리가 세터를 호출함
나는 Vue가 정의되지 않은 속성을 보거나 새로운 속성을 감지할 수 없다는 것을 이해한다(https://vuejs.org/v2/guide/reactivity.html#Change-Detection-Caveats).해야 한다Vue.set
Vue가 그들을 보게끔.그러나 이 경우에는 실제 값 설정을 수행하는 외부 라이브러리를 사용하기 때문에 이 작업이 가능하지 않다.docmod
.
나는 당신에게 그것이 무엇을 하는지 알려주기 위해 최소한의 도서관 버전을 샌드박스에 포함시켰다.문서 오브젝트에 필드 값을 추가하는 것은 이 라이브러리 입니다.특정 게이터와 세터들을 이용해서 이렇게 하는데, 나는 그 게터들과 세터들을 잘 보관해서 확실히 해두고 싶다.docmod
기대했던 대로 계속 작동하고 있다.
내가 할 수 없는 일들
- 정의
c
세팅으로documentContent: { value: { a: '1', b: 'foo', c: '' }}
. 어떤 속성이 나타날지는 미리 알 수 없다. - 바꾸다
docmod
비치할 도서관Vue.set
그 안에
가능한 해결책
Vue가 전체 문서 개체를 보고 초기 값이 없는 필드의 변경 사항을 탐지하도록 할 수 있는 방법이 있는가?예를 들어,docmod
변경된 내용을 알려 줄 수 있는데, Vue가 어떤 식으로든 페이지를 업데이트하도록 강제할 수 있는가?값의 개체 속성을 다시 정의하여 호출하는 일부 코드로 원래 Getter 및 Setter를 래핑할 수 있는가?Vue.set
?
어떤 도움이라도 대단히 감사하다!
전화할 수 있다.this.$forceUpdate();
억지로Vue
화면을 업데이트하기 위해.이것은 추천하는 방법은 아니지만, 너의 경우 나는 다른 것을 잘 볼 수 없다.
여기에서 업데이트된 버전을 참조하십시오. https://codesandbox.io/s/zk4vy6qly3
나는 방법을 추가했다.refresh
당신 안에Form.vue
, 에 구속되어 있다.@input
당신의 텍스트 박스에 대해.이 방법은 호출한다.this.$forceUpdate();
원인이 되다Vue
다시 렌더링하다
'programing' 카테고리의 다른 글
Axios 요청 - 쿼리된 데이터 대신 Getter setter 메서드를 제공 (0) | 2022.05.23 |
---|---|
Vue.js 계산된 속성을 강제로 다시 계산하시겠습니까? (0) | 2022.05.23 |
전에 경시하라, 아니면 그 후에 경시하라. (0) | 2022.05.23 |
Acronyms를 사용한 Java 명명 규칙 (0) | 2022.05.23 |
유닛 테스트를 위해 Vuex 게이터를 조롱하면 예기치 않은 결과가 발생함 (0) | 2022.05.23 |