반응형
Vuex 상태를 업데이트하면 LokiJS 데이터도 변경됩니다. 이유가 무엇입니까?Vuex / LokiJs
앱 워크플로우는 API 백엔드에서 데이터를 가져와 LokiJs의 도움을 받아 클라이언트 스토리지에 씁니다.고객 컬렉션에는 수천 개의 데이터가 있습니다.앱 상태 관리를 위해 Vuex를 사용합니다.
그리고 여기에 문제가 있다.Vuex 상태를 변경하면 LokiJS 스토리지의 데이터도 변경됩니다.어떻게 하면 피할 수 있을까요?
LS(lokijs 스토리지)에서 사용자를 가져오는 Vuex 액션이 있다.
getStudentByClass({ state, commit }) {
const stds = students.collection.find({ class_id: state.classId });
commit('setStudents', stds);
}
selectStudent(state, index) {
const student = state.students[index];
Vue.set(student, 'selected', !student.selected);
}
및 Vuex 돌연변이
setStudents(state, students) {
state.students = students
}
상기와 같이selectStudent
Vuex 스토어에서 학생이 선택한 속성을 변경하지만 LS에서도 변경됩니다.
원본 LS 데이터는 다음과 같습니다.
$loki: 63
class_id: 5
color: "green"
id: 248
meta: Object
name: "John Doe"
point: 100
teacher: 0
updated_at: "2017-01-24 10:00:34"
username: "johdoe"
LS 데이터 변경
$loki: (...)
class_id: (...)
color: (...)
id: (...)
meta: (...)
name: (...)
point: (...)
selected: true <--------------- here
teacher: (...)
updated_at: (...)
username: (...)
__ob__: Observer
get $loki: function reactiveGetter()
set $loki: function reactiveSetter(newVal)
// skipped
개체는 JS에서 참조로 전달되므로 vuex에서 변경하면 loki에서도 변경됩니다.특이한 점은 없어요.
원하지 않으면 다음과 같은 패키지를 사용해야 합니다.clone-deep
vuex에 전달하기 전에 loki의 결과를 복제합니다(로다시는 사용하는 경우에도 이와 같은 기능이 있습니다).
언급URL : https://stackoverflow.com/questions/42727331/updating-vuex-state-changes-lokijs-data-too-why-vuex-lokijs
반응형
'programing' 카테고리의 다른 글
Vue.js에서 스크롤 다운 이벤트에서 네비게이션 페이드인 및 페이드아웃을 하는 방법YOffset = 0 (0) | 2022.07.26 |
---|---|
vuejs의 html 태그에 dir rtl 특성 추가 (0) | 2022.07.26 |
Vue: 테이블에 중첩된 데이터 표시 (0) | 2022.07.26 |
vuejs2의 vnode 컨텍스트에서 감시 삭제 (0) | 2022.07.26 |
vee-module이 bootstrap-vue와 함께 작동하지 않음 (0) | 2022.07.26 |