ভুয়েজ - একাধিক পরামিতি রূপান্তরে চলেছে


124

আমি ভ্যুজেস এবং লারাভেলের পাসপোর্ট ব্যবহার করে কোনও ব্যবহারকারীকে প্রমাণীকরণের চেষ্টা করছি।

আমি কোনও ক্রিয়াকলাপের মাধ্যমে ভ্যুয়াক্স মিউটেশনে একাধিক পরামিতি কীভাবে প্রেরণ করব তা আমি বুঝতে সক্ষম নই।

- দোকান -

export default new Vuex.Store({
    state: {
        isAuth: !!localStorage.getItem('token')
    },
    getters: {
        isLoggedIn(state) {
            return state.isAuth
        }
    },
    mutations: {
        authenticate(token, expiration) {
            localStorage.setItem('token', token)
            localStorage.setItem('expiration', expiration)
        }
    },
    actions: {
        authenticate: ({ commit }, token, expiration) => commit('authenticate', token, expiration)
    }
})

- লগইন পদ্ধতি -

login() {
      var data = {
           client_id: 2,
           client_secret: '**************************',
           grant_type: 'password',
           username: this.email,
           password: this.password
      }
      // send data
      this.$http.post('oauth/token', data)
          .then(response => {
              // send the parameters to the action
              this.$store.dispatch({
                  type: 'authenticate',
                  token: response.body.access_token,
                  expiration: response.body.expires_in + Date.now()
              })
     })
}



আমি যে কোন ধরনের সাহায্যের জন্য খুব কৃতজ্ঞ হবে!

উত্তর:


172

মিউটেশন দুটি আর্গুমেন্টের প্রত্যাশা করে: stateএবং payload, যেখানে স্টোরের বর্তমান অবস্থাটি প্রথম আর্গুমেন্ট হিসাবে ভুেক্স নিজেই পাস করে এবং দ্বিতীয় যুক্তিতে আপনার যে প্যারামিটারগুলি পাস করতে হবে তা ধারণ করে।

বেশ কয়েকটি পরামিতি পাস করার সহজ উপায় হ'ল তাদের ধ্বংস করা :

mutations: {
    authenticate(state, { token, expiration }) {
        localStorage.setItem('token', token);
        localStorage.setItem('expiration', expiration);
    }
}

তারপরে আপনার ক্রিয়াকলাপগুলি পরে আপনি সহজেই করতে পারেন

store.commit('authenticate', {
    token,
    expiration,
});

এটি দ্বিতীয় যুক্তির প্রত্যাশা করে না , এটি alচ্ছিক।
খনন করুন

প্যারামিটারগুলি কীaction
ইদ্রিস স্ট্যাক

108

সাধারণ পদগুলিতে আপনাকে আপনার পে-লোড একটি কী অ্যারে রূপে তৈরি করতে হবে

payload = {'key1': 'value1', 'key2': 'value2'}

তারপরে পেডলোডটি সরাসরি অ্যাকশনে প্রেরণ করুন

this.$store.dispatch('yourAction', payload)

আপনার ক্রিয়ায় কোনও পরিবর্তন নেই

yourAction: ({commit}, payload) => {
  commit('YOUR_MUTATION',  payload )
},

আপনার বিবর্তনে কীগুলি দিয়ে মানগুলিকে কল করুন

'YOUR_MUTATION' (state,  payload ){
  state.state1 = payload.key1
  state.state2 =  payload.key2
},

2
ধন্যবাদ. এটি ঠিক আমি যা খুঁজছিলাম
বাউন্ডফোর্ডগ্লোরি

আমি প্রক্রিয়াটি সহজ করেছিলাম কারণ আমি এটি বিভ্রান্তিকর পেয়েছি, সাহায্য করতে পেরে আনন্দিত
পিটাররিটিফ

1
সাধারণ ব্যবহারের জন্য আপনি ES6 'YOUR_MUTATION' (রাজ্য, {কী 1, কী 2}) {state.state1 = key1 state.state2 = key2 after,
পাবলোআরএন পরে 29:29

3

আমি মনে করি এটি এতটা সহজ হতে পারে যে ধরে নেওয়া যাক আপনি যখন একাধিক পরামিতি আপনাকে ক্রিয়াতে পাঠিয়ে যাচ্ছেন তখন আপনি পড়তে পারেন ক্রিয়াগুলি কেবলমাত্র দুটি পরামিতি গ্রহণ করে contextএবং payloadআপনার ডেটা যা আপনি ক্রিয়ায় পাস করতে চান তাই একটি উদাহরণ নেওয়া যাক

অ্যাকশন সেট আপ করা হচ্ছে

পরিবর্তে

actions: {
        authenticate: ({ commit }, token, expiration) => commit('authenticate', token, expiration)
    }

করা

actions: {
        authenticate: ({ commit }, {token, expiration}) => commit('authenticate', token, expiration)
    }

কলিং (প্রেরণ) পদক্ষেপ

পরিবর্তে

this.$store.dispatch({
                  type: 'authenticate',
                  token: response.body.access_token,
                  expiration: response.body.expires_in + Date.now()
              })

করা

this.$store.dispatch('authenticate',{
                  token: response.body.access_token,
                  expiration: response.body.expires_in + Date.now()
              })

আশা করি এই সাহায্য করবে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.