मैं एक छोटे ऐप के लिए Vue.js 2.0 और Vuex 2.0 का उपयोग कर रहा हूं। मैं एक कार्य है कि एक एपीआई से प्रारंभिक अवस्था को पुन: प्राप्त फोन करके 'बनाया' जड़ Vue उदाहरण पर जीवन चक्र हुक में दुकान आरंभ कर रहा हूँ .... की तरह तो मेरे रूट घटक में:मैं व्यूएक्स 2 में प्रारंभिक स्थिति कैसे सेट करूं?
const app = new Vue({
el: "#app",
router,
store,
data: {
vacation: {},
},
components: {
'vacation-status': VacationStatus,
},
created(){
//initialize store data structure by submitting action.
this.$store.dispatch('getVacation');
},
computed: {
},
methods: {
}
});
यह ठीक काम कर रहा है।
getVacation({commit}){
api.getVacation().then(vacation => commit(UPDATE_VACATION, vacation))
}
उत्परिवर्तन कि यह 'UPDATE_VACATION' के साथ करने से है यहाँ है:
[UPDATE_VACATION] (state, payload) {
state.vacation = payload.vacation;
},
मेरे समस्या: जब मैं लोड यहाँ मेरी दुकान पर कार्रवाई कि मैं यहाँ फोन कर रहा हूँ है ऐप, मेरे सभी घटकों जो स्टोर से 'हो रही' मान हैं, त्रुटियों को फेंक देते हैं मैं स्टोर पर 'अपरिभाषित' मानों तक पहुंचने का प्रयास कर रहा हूं। दूसरे शब्दों में, राज्य अभी तक शुरू नहीं हुआ है। क्योंकि 'छुट्टी' राज्य वस्तु पर अपरिभाषित है
computed: {
arrival() {
return this.$store.getters.arrival
},
departure() {
return this.$store.getters.departure
},
countdown: function() {
return this.$store.getters.countdown
}
}
इन सभी टिककर खेल त्रुटियों का कारण:
उदाहरण के लिए, मैं एक घटक बाल अवयव इस तरह में ही टिककर खेल है कि है। यह मेरे लिए एक असीमित समस्या की तरह लगता है, लेकिन गलत हो सकता है। क्या मैं अपनी दुकान स्थिति को गलत जगह पर शुरू कर रहा हूं?
Vue.use(Vuex);
export default new Vuex.Store({
state: {},
getters: {
getVacation: state => {
return state.vacation
},
guests: state => {
return state.vacation.guests
},
verifiedGuests: state => {
return state.vacation.guests.filter(guest => guest.verified)
},
emergencyContacts: state => {
return state.emergency_contacts
},
arrival: state => {
return state.vacation.check_in
},
departure: state => {
return state.vacation.check_out
},
countdown : state => {
let check_in = new Date(state.vacation.check_in);
let now = new Date();
if ((now - check_in) > 0) {
return 'This vacation started on ' + check_in;
}
let difference = check_in - now;
let day = 1000 * 60 * 60 * 24;
return Math.ceil(difference/day) + " days until your vacation";
}
},
mutations: {
[UPDATE_VACATION] (state, payload) {
state.vacation = payload.vacation;
},
[ADD_GUEST] (state, payload) {
state.vacation.guests.push(payload.guest);
},
[REMOVE_GUEST] (state, payload){
state.vacation.guests.filter(guest => { debugger; return guest.id != payload.guest.id})
},
[UPDATE_GUEST] (state, payload){
state.vacation.guests.map(guest => {
// Refactor Object.assign to deep cloning of object
return guest.id === payload.guest.id ? Object.assign({}, guest, payload.guest) : guest;
})
},
[ADD_EMERGENCY] (state, payload){
state.vacation.emergency_contacts.push(payload.emergency_contact)
},
[REMOVE_EMERGENCY] (state, payload){
state.vacation.emergency_contacts.filter(contact => contact.id !== payload.emergency_contact.id)
},
[UPDATE_EMERGENCY] (state, payload){
state.vacation.emergency_contacts.map(contact => {
// Refactor not needed because emergency_contact is a shallow object.
return contact.id === payload.emergency_contact.id ? Object.assign({}, contact, payload.emergency_contact) : contact;
});
}
},
actions: {
getVacation({commit}){
api.getVacation().then(vacation => commit(UPDATE_VACATION, vacation))
},
addGuest({commit}, guest){
commit(ADD_GUEST, guest);
},
removeGuest({commit}, guest){
commit(REMOVE_GUEST, guest);
},
updateGuest({commit}, guest){
commit(UPDATE_GUEST, guest);
},
addEmergency({commit}, guest){
commit(ADD_EMERGENCY, contact)
},
removeEmergency({commit}, contact){
commit(REMOVE_EMERGENCY, contact)
},
updateEmergency({commit}, contact){
commit(UPDATE_EMERGENCY, contact)
},
updateServer(store, payload){
return api.saveVacation(payload)
}
}
});
बस इतना समाधान दूसरों के लिए स्पष्ट है:
मैं दुकान अपने आप में काफी ठीक से मेरी inital राज्य की स्थापना नहीं की गई थी। मैं डेटा में खींच रहा था, और दुकान ठीक ढंग से अद्यतन है, लेकिन दुकान की जरूरत है इस तरह प्रारंभ करने के लिए:
export default new Vuex.Store({
state: {
vacation: {}//I added this, and then justed updated this object on create of the root Vue Instance
},
});
प्रतिक्रिया के लिए धन्यवाद! मैंने रूट वू इंस्टेंस में किसी भी गेटर्स को शामिल नहीं किया क्योंकि मैं रूट के बाल घटकों में अपने सभी गेटर्स को घोषित कर रहा हूं। क्या वह ठीक है? या क्या मुझे अपने उदाहरणकर्ताओं को उसी उदाहरण में घोषित करने की ज़रूरत है कि मैं आपके द्वारा बनाई गई 'बनाई गई' जीवन चक्र विधि में शामिल हूं? – calbear47
मैंने अपनी पूरी दुकान शामिल की, सहायता – calbear47
सहायता के लिए धन्यवाद। आपका स्वागत है।घटक पर गेटर्स जोड़ना ठीक है। आप computed प्रोप के अंदर गेटर्स जोड़ सकते हैं। आपके घटकों का आपके अपडेट में: मैं आपके राज्य ऑब्जेक्ट में अवकाश जोड़ूंगा। इस 'राज्य की तरह: {छुट्टी: {}} '। मुझे लगता है कि प्रतिक्रियाशील प्रोप काम करने की आवश्यकता है। – AWolf