ভয়েস: অন্য মডিউল থেকে অ্যাক্সেস স্টেট


100

আমি অ্যাক্সেস করতে চান state.sessionমধ্যে instance.jsথেকে records_view.js। এটি কীভাবে সম্পন্ন হয়?

স্টোর / মডিউল / উদাহরণ.js

const state = {
  // This is what I want to access in records_view.js
  session: {}
};

const getters = {
  sessionGetter: state => state.session
};

স্টোর / মডিউল / রেকর্ড_ভিউ.জেএস

const actions = {
  getSettingsAction (context, props) {
    // This is how I'm trying to access session, which doesn't work
    let session = context.state.instance.session;

    Api(
      context,
      {
        noun: props.noun,
        verb: 'GetRecordsViewSettings',
        orgUnitKey: _.has(session, 'orgunit.key') ? session.orgunit.key : '',
        data: {}
      },
      props.callback
    );
  }
};

এটি যুক্ত করা প্রসঙ্গে কিছুটা।

store / index.js

import Vue from 'vue';
import Vuex from 'vuex';
import * as actions from './actions';
import * as getters from './getters';
import * as types from './mutation-types';

import instance from './modules/instance';
import recordsView from './modules/records_view';

Vue.use(Vuex);

export default new Vuex.Store({
  state,
  actions,
  getters,
  mutations,
  modules: {
    instance,
    recordsView
  }
});

উত্তর:


139

stateস্থানীয় রাষ্ট্রের উল্লেখ করে এবং rootStateঅন্যান্য মডিউলগুলির স্থিতিতে অ্যাক্সেস করার সময় ব্যবহার করা উচিত।

let session = context.rootState.instance.session;

ডকুমেন্টেশন: https://vuex.vuejs.org/en/modules.html


14
কেবল যুক্ত করার জন্য আপনি যদি সরাসরি রাজ্যের পরিবর্তে কোনও গেটর অ্যাক্সেস করতে চান তবে প্রসঙ্গ.রোটগিটারগুলির মতো কাজও করতে পারেন।
ব্র্যাড

সঠিক করার সময় উপরের উত্তরটি অসম্পূর্ণ। নীচের পোস্টটি কীভাবে উপরে উল্লিখিত প্রসঙ্গটি ক্রিয়ায় পাস করবেন তা চিত্রিত করে।
লুক এফ

43

একটি ক্রিয়া থেকে:

'contacts:update' ({ commit, rootState }) {
    console.log('rootState', rootState.users.form)
    ......

  },

4
যদিও এটি প্রশ্নের উত্তর দিতে পারে, কোড কেন রেফারেন্সের সাথে কাজ করে তার একটি ব্যাখ্যা প্রদান করা সর্বদা ভাল।
টিম হাচিসন

নতুনদের জন্য উপরের সিনট্যাক্সটি বিভ্রান্তিকর। আর্গুমেন্ট হিসাবে প্রসঙ্গে পাস করা ভাল এবং তারপরে কমিট এবং রুটস্টেট অ্যাক্সেস করুন। শর্টহ্যান্ড বিভ্রান্তিকর। এটি বোঝা সহজ: 'পরিচিতি: আপডেট' (প্রসঙ্গ) {কনসোল.লগ ('রুটস্টেট', প্রসঙ্গ.রোট স্টেট.ইউসারস.ফর্ম) ...... প্রসঙ্গ.কম .......},
লুক এফ।

@ লুকএফ - এটি ভিউক্স ডকুমেন্টেশনে এক সময় ব্যতীত ব্যবহৃত স্ট্যান্ডার্ড সিনট্যাক্স এবং অন্য যে কোনও জায়গায় এটি ব্যবহৃত হয়। অ্যাকশন ডক্সের দিকে যে কেউ নজর রেখেছেন তারা সেখানে দেওয়া ধ্বংসাত্মক ব্যাখ্যা সহ এটি সেখানে দেখতে পাবেন।
ড্যান

প্রকৃতপক্ষে. একই সাথে ডকুমেন্টেশন পরিষ্কার থাকলে আমাদের মধ্যে অনেকেই এখানে থাকত না। :)
লুক এফ

এখানে ভ্যু ডকুমেন্টেশন সরবরাহ করে এমন উক্তিটির চেয়ে আরও অ্যাক্সেসযোগ্য ধ্বংসের বিষয়ে একটি রেফারেন্স / ব্যাখ্যা এখানে দেওয়া হয়েছে: পাঠ্যক্রম
লুক এফ

7

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

এমনকি মডিউলে আপনি কনসোল.লগ (এই স্টেট) এর মাধ্যমে কী গ্লোবাল স্টেটে অ্যাক্সেস পেয়েছেন তা দেখতে পাবেন in

const mutations = {
MuteChangeAmt(state, payload) {
//From user module; Need THIS keyword to access global state
this.state.user.payees.amount = payload.changedAmt;
 }
}

2

আমার ক্ষেত্রে এটি আমার পক্ষে এভাবে কাজ করেছিল।

ModuleA.js ফাইলটিতে:

Module A:  
export const state = {
    parameterInA: 'A'
 }
export const action = {
    showParameterB() {
    console.log("Parameter B is: " + this.state.B. parameterInB)
}

মডিউলবি ফাইলটিতে:

export const state = {
    parameterInB: 'B'
 }

export const action = {
    showParameterA() {
    console.log("Parameter A is: " + this.state.A.parameterInA)
}  

মূলের জন্য আপনাকে সূচি.জেজে মডিউলএ এবং বি আমদানি করতে হবে:

import * as A from 'ModuleA.js'  
import * as B from 'ModuleB.js'

এইভাবে, রাষ্ট্রের পরামিতিগুলি সাব মডিউলগুলিতে ক্রস-রেফারেন্স করা যায়।


-3

sessionআপনার গেটসগুলিতে এটি অ্যাক্সেস করার জন্য আপনাকে নীচের মতো আপনার রাজ্যে সংজ্ঞায়িত করতে হবে :

const state = {
  session: ''
}

আপনাকে কোনও মিউটেশন লিখতে হবে, যা এই পদক্ষেপের মানটি নির্ধারণ করার জন্য আপনার ক্রিয়া থেকে ডাকা হবে।


আপনি এখানে উল্লিখিত সমস্ত কিছু আমার কাছে আছে। আমি কোনও উপাদানটির মধ্যে থেকে সেশনটি অ্যাক্সেস করতে পারি, তবে আমি নিশ্চিত নই যে কীভাবে অন্য ভিউক্স মডিউলের (যেমন রেকর্ড_ভিউ.জেএস) ভিতরে সেশনটি অ্যাক্সেস করবেন।
ডনি

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