Vuex - 계산된 속성 "name"이(가) 할당되었지만 세터가 없음
양식 검증이 있는 구성요소가 있어다단계 체크아웃 양식이다.아래 코드는 첫 번째 단계를 위한 것이다.사용자가 텍스트를 입력했는지 확인하고 이름을 글로벌 상태로 저장한 후 다음 단계로 전송하십시오.ve-validate와 vuex를 사용하고 있다.
<template>
<div>
<div class='field'>
<label class='label' for='name'>Name</label>
<div class="control has-icons-right">
<input name="name" v-model="name" v-validate="'required|alpha'" :class="{'input': true, 'is-danger': errors.has('name') }" type="text" placeholder="First and Last">
<span class="icon is-small is-right" v-if="errors.has('name')">
<i class="fa fa-warning"></i>
</span>
</div>
<p class="help is-danger" v-show="errors.has('name')">{{ errors.first('name') }}</p>
</div>
<div class="field pull-right">
<button class="button is-medium is-primary" type="submit" @click.prevent="nextStep">Next Step</button>
</div>
</div>
</template>
<script>
export default {
methods: {
nextStep(){
var self = this;
// from baianat/vee-validate
this.$validator.validateAll().then((result) => {
if (result) {
this.$store.dispatch('addContactInfoForOrder', self);
this.$store.dispatch('goToNextStep');
return;
}
});
}
},
computed: {
name: function(){
return this.$store.state.name;
}
}
}
</script>
나는 주문 상태를 처리하고 이름을 기록하는 가게를 가지고 있다.궁극적으로 나는 모든 정보를 다단계 양식에서 서버로 보내고 싶다.
export default {
state: {
name: '',
},
mutations: {
UPDATE_ORDER_CONTACT(state, payload){
state.name = payload.name;
}
},
actions: {
addContactInfoForOrder({commit}, payload) {
commit('UPDATE_ORDER_CONTACT', payload);
}
}
}
이 코드를 실행하면 다음과 같은 오류가 발생함Computed property "name" was assigned to but it has no setter.
이름 필드의 값을 글로벌 상태로 바인딩하려면 어떻게 해야 하는가?사용자가 한 단계 뒤로 가더라도("다음 단계" 클릭 후) 이 단계에서 입력한 이름을 볼 수 있도록 이 단계를 지속했으면 한다.
할 거면v-model
계산한 사람, 세터가 필요해업데이트된 값으로 원하는 작업(아마도 이 값을 에 기록)$store
세터 안에서 당신이 하는 일이 바로 그것이라는 것을 고려한다면.
서식을 제출하여 스토어에 다시 쓴다면, 당신은 그것을 원하지 않는다.v-model
, 당신은 단지 설정하기를 원한다.:value
.
중간 상태를 원하는 경우, 중간 상태를 저장하지만 원본은 덮어쓰지 않는 경우$store
양식을 제출할 때까지 이러한 데이터 항목을 생성하십시오.
이렇게 해야 한다.
구성 요소
computed: {
...mapGetters({
nameFromStore: 'name'
}),
name: {
get(){
return this.nameFromStore
},
set(newName){
return newName
}
}
}
당신의 가게에서
export const store = new Vuex.Store({
state:{
name : "Stackoverflow"
},
getters: {
name: (state) => {
return state.name;
}
}
}
나에게 있어 그것은 변하고 있었다.
this.name = response.data;
계산된 수익에 대해 다음과 같이 계산된 반환 값.
this.$store.state.name = response.data;
난 똑같은 실수를 하고 있었다.
계산 속성 "callRingtatus"가 할당되었지만 세터가 없음
여기 내 시나리오에 따른 샘플 코드가 있다.
computed: {
callRingtatus(){
return this.$store.getters['chat/callState']===2
}
}
위의 코드를 다음과 같은 방법으로 변경한다.
computed: {
callRingtatus(){
return this.$store.state.chat.callState===2
}
}
계산 후크 내부 게터 대신 vuex 저장소 상태에서 값 가져오기
그쪽에서 가치를 얻을 때 그런 오류가 있었다.store
에computed
경유로...mapState(['sampleVariable'])
너처럼그럼 나는 그 제품을 사용했네.this.sampleVariable
에<script>
그리고sampleVariable
에<template>
.
문제를 해결한 것은 다음과 같았다.return
이 안에data()
, 분리된 변수에 할당하고 전체에서 재사용component
새로 생성된 변수, 이와 같이:
data() {
return {
newVariable: this.$store.state.sampleVariable,
}
}
그러면 구성 요소의 참조를 다음에서 변경했다.sampleVariable
로newVariable
, 그리고 오류는 사라졌다.
'Programing' 카테고리의 다른 글
웹 팩-dev-server가 리액터로부터 진입점을 허용하는 방법 (0) | 2022.03.05 |
---|---|
Vue의 계산된 속성에 매개 변수를 전달할 수 있는가? (0) | 2022.03.05 |
[vue 경고]:요소를 찾을 수 없음 (0) | 2022.03.05 |
'Unchecked runtime.lastError:응답이 수신되기 전에 메시지 포트가 닫힘' 크롬 문제? (0) | 2022.03.05 |
구성 요소 외부에서 Vue.js 구성 요소 메서드를 호출하십시오. (0) | 2022.03.05 |