আমি কীভাবে ভেক্সের অন্য গেটারের কাছ থেকে একজন কলকারীকে কল করব?


105

একটি সহজ Vue ব্লগ বিবেচনা করুন:
আমি আমার ডেটাসঞ্চয় যেমন Vuex ব্যবহার করছি এবং আমার দুই সেট আপ করার প্রয়োজন getters : একটি getPostএকটি পুনরুদ্ধারের জন্য সংগ্রহকারী postহিসাবে ভাল একটি হিসেবে আইডি দিয়ে listFeaturedPostsযে আয় প্রতিটি বৈশিষ্ট্যযুক্ত পোস্টের প্রথম কয়েকটি অক্ষর। বৈশিষ্ট্যযুক্ত পোস্টের তালিকার জন্য ডেটাস্টোর স্কিমা তাদের আইডি দ্বারা পোস্টগুলিকে উল্লেখ করে। এই আইডিগুলি সংক্ষিপ্তসারগুলি দেখানোর উদ্দেশ্যে প্রকৃত পোস্টগুলিতে সমাধান করা দরকার।

store / state.js

export const state = {
  featuredPosts: [2, 0],
  posts: [
    'Lorem et ipsum dolor sit amet',
    'Lorem et ipsum dolor sit amet',
    'Lorem et ipsum dolor sit amet',
    'Lorem et ipsum dolor sit amet',
    'Lorem et ipsum dolor sit amet',
  ]
}

store / getters.js

export default getPost = (state) => (postID) => {
  return state.posts[postID]
}

export default listFeaturedPosts = (state, getters) => () => {
  console.log(getters) // {}

  return state.featuredPosts.map(postID => getters.getPost(postID).substring(0, EXCERPT_LENGTH);
}

store / index.js

import Vue from 'vue'
import Vuex from 'vuex'
import state from './state'
import * as getters from './getters'
import * as mutations from './mutations'

Vue.use(Vuex)

export default new Vuex.Store({
  state,
  getters,
  mutations
})

ডকুমেন্টেশন অনুসারে, gettersপরামিতিটি অন্য গেটারদের অ্যাক্সেস করতে ব্যবহার করা যেতে পারে। যাইহোক, আমি যখন gettersভিতরে থেকে অ্যাক্সেস করার চেষ্টা করি তখন listFeaturedPostsএটি খালি হয় getters.getPostএবং সেই প্রসঙ্গে অপরিজ্ঞাত হওয়ার কারণে কনসোলটিতে আমি একটি ত্রুটি পেয়েছি ।

উপরের উদাহরণে আমি কীভাবে getPostভিতরে থেকে ভিউক্স গেটার হিসাবে কল করব listFeaturedPosts?

উত্তর:


172

ভ্যুজেএস ২.০ এ আপনাকে অবশ্যই উভয় stateএবং পাস করতে হবে getters

গেটরগুলি দ্বিতীয় আর্গুমেন্ট হিসাবে অন্য প্রাপ্তদের কাছে পাস করা হয় :

export default foo = (state, getters) => {
    return getters.yourGetter
}

অফিসিয়াল ডকুমেন্টেশন: https://vuex.vuejs.org/guide/getters.html#property-style-access


18

gettersস্থানীয় এবং অ-নামবিহীন গেটারদের অ্যাক্সেসের জন্য দ্বিতীয় যুক্তি হিসাবে পাস করুন । নেমস্পিড মডিউলগুলির জন্য আপনার ব্যবহার করা উচিত rootGetters( অন্য মডিউলে সংজ্ঞায়িত গেটারদের অ্যাক্সেসের জন্য 4 র্থ যুক্তি হিসাবে ):

export default foo = (state, getters, rootState, rootGetters) => {
    return getters.yourGetter === rootGetters['moduleName/getterName']
}

4
এটি অন্য ভ্যুয়াক্স মডিউল থেকে গেটারের প্রয়োজন ব্যক্তির জন্য দরকারী। আমি কেবল জোর দিয়েই বলতে চেয়েছিলাম যে যুক্তিগুলি কাজ করার জন্য কোনও যুক্তি বাদ দেওয়া ছাড়াই উত্তরে প্রদর্শিত নির্দিষ্ট ক্রমে থাকতে হবে।
এলজেএইচ

13

আমি ছাড়া পরীক্ষা করেছি stateএবং কাজ করিনি। এজন্যই stateপ্রয়োজনীয়।

এইটা কাজ করে:

export default foo = (state, getters) => {
    return getters.yourGetter
}

এই কাজ করে না

export default foo = (getters) => {
    return getters.yourGetter
}

4
আমি যুক্ত করতে চাই যে এটি কোনও ভ্যু সংস্করণে কাজ করে না। অবজেক্ট ডেস্ট্রাকচারিংকে নামযুক্ত আর্গুমেন্টগুলির সাথে বিভ্রান্ত করা উচিত নয় ('রাষ্ট্র' বাদ দেওয়ার জন্য মূল পরামর্শে উত্তর দেখুন)। এটি প্রকৃতপক্ষে (রাষ্ট্র,
গেটার্স

4
দ্বিতীয় উদাহরণে আপনি stateবস্তুর নামকরণ করছেন gettersএবং দ্বিতীয় যুক্তি উপেক্ষা করছেন যা আসল gettersবস্তু হবে। আপনি যদি gettersএই উদাহরণটিতে অন্তর্দর্শন করতে চান তবে আপনি দেখতে পাবেন এটি আসলে আপনার রাষ্ট্রীয় বিষয়।
ম্যারানক্রুজ

10

প্রাপ্তিরা দ্বিতীয় আর্গুমেন্ট হিসাবে অন্যান্য প্রাপ্তিগুলি গ্রহণ করে

getters: {
  doneTodos: state => {
    return state.todos.filter(todo => todo.done)
  },
  doneTodosCount: (state, getters) => {
    return getters.doneTodos.length
  }
}

অফিসিয়াল ডক্সের এখানে একটি লিঙ্ক দেওয়া আছে - https://vuex.vuejs.org/guide/getters.html#property-style-access


4
থাম্বস আপ এর জন্য: ক) একটি স্পষ্ট কোড উদাহরণ খ)
ডক্সে

4
পরিবর্তে কি এইভাবে লিখতে পার্থক্য রয়েছে? getters: {doneTodos: state => {state.todos.filter (todo => todo.done) done, সম্পন্নডোডসઉન્ટ: (রাষ্ট্র, getters) => this এই.টাইটার্স.ডোনটোডোস দৈর্ঘ্য {{
রিভো

@ রিভো যতদূর আমি জানি আপনি এটি করতে পারবেন না। যদি আপনি চেষ্টা করেন আপনি এর মতো একটি ত্রুটি পেয়ে যাবেন: [ভ্যু সতর্কতা]: রেন্ডারে ত্রুটি: "প্রকারের ত্রুটি:
অপরিজ্ঞাতকৃত

-3

রাষ্ট্রের পরিবর্তে পাসের পরিবর্তে পাসকারীদের পাস করুন এবং তারপরে আপনি চান এমন অন্য কোনও গেটরকে কল করুন। আশা করি এটা সাহায্য করবে.

আপনার স্টোর / getters.js এ

export default foo = (getters) => {
   return  getters.anyGetterYouWant
}

4
আমি মনে করি আপনি আর্গুমেন্টের সাথে অবজেক্ট ডিস্ট্রাকচারকে বিভ্রান্ত করছেন। ফাংশনটির প্রথম যুক্তিটি হল রাষ্ট্র, দ্বিতীয়টি গেটার্স অবজেক্ট। আপনি প্রথম আর্গুমেন্টের নাম 'গেটরস' রাখতে পারেন, তবে এটি এখনও রাষ্ট্র হবে! আপনি সন্ধান করছেন: রফতানি ডিফল্ট foo = (রাষ্ট্র,
getters

বাexport default foo = ({ getters }) => { return getters.anyGetterYouWant }
গ্যারিএমসিএম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.