ভিউক্স অ্যাকশন বনাম মিউটেশন


173

ভুয়েসে, "ক্রিয়া" এবং "মিউটেশন" উভয়েরই যুক্তি কী?

আমি উপাদানগুলি (যা স্মার্ট বলে মনে হচ্ছে) সংশোধন করতে না পারার যুক্তি বুঝতে পেরেছি, তবে ক্রিয়া এবং মিউটেশন উভয়ই মনে হচ্ছে আপনি অন্য ফাংশনটি ট্রিগার করতে একটি ফাংশন লিখছেন, তারপরে রাষ্ট্র পরিবর্তন করতে।

"ক্রিয়াগুলি" এবং "মিউটেশনগুলির মধ্যে পার্থক্য কীভাবে" তারা কীভাবে একসাথে কাজ করবে এবং আরও, আমি আগ্রহী যে কেন ভেক্স বিকাশকারীরা এইভাবে এটি করার সিদ্ধান্ত নিয়েছে?


2
"টু টু অ্যাকশনস" দেখুন, আমার মনে হয়: vuex.vuejs.org/en/mutations.html#on-to-tives
রায় জে

সম্পর্কিত আলোচনা: github.com/vuejs/vuex/issues/587
chuck911

1
আপনি সরাসরি স্টোরের রাজ্যে পরিবর্তন করতে পারবেন না। কোনও স্টোরের স্থিতি পরিবর্তন করার একমাত্র উপায় হ'ল স্পষ্টভাবে মিউটেশন করা commit এর জন্য আমাদের মিউটেশন করার জন্য পদক্ষেপের প্রয়োজন।
সুরেশ স্বপ্নোটা

1
@ সুরেশসাপকোটার উক্তিটি খুব বিভ্রান্তিকর, যেমন উভয়ই mutationsএবং actionsভয়েস ডকুমেন্টেশনে রাষ্ট্র পরিবর্তন করার পদ্ধতি হিসাবে নির্ধারিত রয়েছে। রূপান্তর করতে আপনার কোনও ক্রিয়া প্রয়োজন নেই।
গ্রাহাম

1
মিউটেশনগুলি, যেমন নামটি সূচিত করে তা আপনার রাষ্ট্রীয় অবজেক্টটি সংশোধন / রূপান্তর করতে ব্যবহৃত হয়। ক্রিয়াগুলি মিউটেশনের সাথে বেশ সমান, তবে রাষ্ট্রকে পরিবর্তিত করার পরিবর্তে অ্যাকশনগুলি মিউটেশন দেয়। ক্রিয়াকলাপগুলিতে যেকোন স্বেচ্ছাসেবক কোড বা ব্যবসায়িক যুক্তি থাকতে পারে । ভিউেক্স সুপারিশ করে যে রাষ্ট্রীয় বস্তুকে কেবল মিউটেশন ফাংশনগুলির মধ্যেই পরিবর্তন করতে হবে। মিউটেশন ফাংশনগুলির অভ্যন্তরে কোনও ভারী বা ব্লকিং কোডটি চালিত না করার পরামর্শ দেওয়া হয় কারণ এটি প্রকৃতির সিঙ্ক্রোনাস
ইমানুয়েল নেেনি

উত্তর:


221

প্রশ্ন 1 : কেন ভিউজ বিকাশকারীরা এইভাবে এটি করার সিদ্ধান্ত নিয়েছে?

উত্তর:

  1. যখন আপনার অ্যাপ্লিকেশনটি বড় হয়ে যায়, এবং যখন এই প্রকল্পে একাধিক বিকাশকারী কাজ করছেন, আপনি "স্টেট ম্যানেজড" (বিশেষত "গ্লোবাল স্টেট") পাবেন, ক্রমশ আরও জটিল হয়ে উঠবে।
  2. ভিউক্স ওয়ে (ঠিক রেডাক্স যেমন রিঅ্যাক্ট.জেজেস ) রাষ্ট্র পরিচালনা, রাষ্ট্র রাখা এবং "সংরক্ষণ এবং ট্র্যাকযোগ্য" এর জন্য একটি নতুন প্রক্রিয়া সরবরাহ করে (যার অর্থ প্রতিটি পরিবর্তন যা রাষ্ট্রকে সংশোধন করে তা ডিবাগ সরঞ্জাম দ্বারা ট্র্যাক করা যায় : ভ্যু-ডেভলগুলি )

প্রশ্ন 2 : "ক্রিয়া" এবং "রূপান্তর" এর মধ্যে পার্থক্য কী?

প্রথমে সরকারী ব্যাখ্যাটি দেখুন:

পরিব্যক্তি:

ভিউক্স মিউটেশনগুলি মূলত ইভেন্টগুলি: প্রতিটি মিউটেশনের একটি নাম এবং একটি হ্যান্ডলার থাকে।

import Vuex from 'vuex'

const store = new Vuex.Store({
  state: {
    count: 1
  },
  mutations: {
    INCREMENT (state) {
      // mutate state
      state.count++
    }
  }
})

ক্রিয়া: ক্রিয়াগুলি কেবলমাত্র ফাংশন যা রূপান্তরগুলি প্রেরণ করে।

// the simplest action
function increment (store) {
  store.dispatch('INCREMENT')
}

// a action with additional arguments
// with ES2015 argument destructuring
function incrementBy ({ dispatch }, amount) {
  dispatch('INCREMENT', amount)
}

এখানে আমার উপরোক্ত ব্যাখ্যা:

  • পরিব্যক্তি হয় একমাত্র উপায় রাষ্ট্র পরিবর্তন করতে
  • মিউটেশন ব্যবসায়ের যুক্তি সম্পর্কে চিন্তা করে না, এটি কেবল "রাষ্ট্র" সম্পর্কে চিন্তা করে
  • ক্রিয়া হ'ল ব্যবসায়ের যুক্তি
  • ক্রিয়া একসাথে 1 টিরও বেশি মিউটেশন প্রেরণ করতে পারে , এটি কেবল ব্যবসায়ের যুক্তি প্রয়োগ করে, এটি ডেটা পরিবর্তনের বিষয়ে চিন্তা করে না (যা রূপান্তর দ্বারা পরিচালিত হয়)

80
কোনও ক্রিয়া "ব্যবসায়ের যুক্তি" এবং একসাথে একাধিক মিউটেশন প্রেরণ করতে পারে তা সহায়ক। এই আমি উত্তর খুঁজছিলাম ছিল। ধন্যবাদ.
কোবি

11
আপনি cuys বলছেন আপনি "একটি রূপান্তর প্রেরণ"। আপনি কি কোনও মিউটেশন পরিবর্তন করতে চান তা সঠিক শব্দটি নয়?
সমস্যাগুলি

4
আপনি কর্ম প্রেরণ এবং মিউটেশন প্রতিশ্রুতিবদ্ধ।
এরিক

4
প্রেরণের জন্য মিউটেশনের জন্য আর 2.0 তে কাজ হয় না, আপনাকে ক্রিয়ায় কোনও রূপান্তর করতে হবে।
এসকেএলটিএফজেড

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

58

মিউটেশনগুলি সিঙ্ক্রোনাস হয়, তবে ক্রিয়াগুলি অবিচ্ছিন্ন হতে পারে।

এটিকে অন্য কোনও উপায়ে দেওয়ার জন্য: আপনার ক্রিয়াকলাপগুলি সিঙ্ক্রোনাস হলে আপনার কোনও ক্রিয়া দরকার নেই, অন্যথায় সেগুলি প্রয়োগ করুন।


2
টোডমভিসি উদাহরণটি কীভাবে কোনও ক্রিয়া ব্যবহার করে না সে সম্পর্কে এটি আসলে একটি প্রশ্নের উত্তর দেয় g
sksallaj

7
'তোমরা ক্রিয়া প্রয়োজন না যদি আপনার অপারেশন সমলয় হয়' : তা সত্য নয়: আপনি কি প্রয়োজন কর্মের যদি আপনি একই মডিউল থেকে একাধিক পরিব্যক্তি রচনা করতে চাই, কারণ আপনি একটি কর্ম থেকে অন্য কর্ম কল করতে পারবেন না।
রায়মুন্ডাস

1
এই উত্তরের সুস্পষ্ট
ফলোআপটি

34

আমি বিশ্বাস করি যে মিউটেশন এবং অ্যাকশনগুলির পিছনে অনুপ্রেরণাগুলি বোঝার ফলে কোনটি কখন এবং কীভাবে ব্যবহার করা যায় সে সম্পর্কে একজনকে আরও ভাল বিচারের সুযোগ দেওয়া হয়। এটি "নিয়ম" अस्पष्ट হয়ে ওঠে এমন পরিস্থিতিতে অনিশ্চয়তার বোঝা থেকে প্রোগ্রামারকে মুক্তি দেয়। তাদের নিজ নিজ উদ্দেশ্য সম্পর্কে কিছুটা বিতর্ক করার পরে, আমি এই সিদ্ধান্তে পৌঁছেছি যে যদিও অ্যাকশন এবং মিউটেশনগুলি ব্যবহারের অবশ্যই ভুল উপায় থাকতে পারে তবে আমি মনে করি না যে একটি প্রচলিত পদ্ধতি রয়েছে।

আসুন আমরা প্রথমে কেন মিউটেশন বা ক্রিয়াগুলির মধ্য দিয়ে যাই তা বোঝার চেষ্টা করি।

প্রথম স্থানে বয়লারপ্লেট দিয়ে কেন যান? সরাসরি উপাদানগুলিতে রাষ্ট্র পরিবর্তন করবেন না কেন?

কঠোরভাবে বলতে গেলে আপনি stateসরাসরি আপনার উপাদানগুলি থেকে পরিবর্তন করতে পারেন । stateশুধু একটি জাভাস্ক্রিপ্ট অবজেক্ট এবং কিছুই ঐন্দ্রজালিক যে যে পরিবর্তন আপনার করা যে প্রত্যাবর্তন করবে না।

// Yes, you can!
this.$store.state['products'].push(product)

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

// so we go from this
this.$store.state['products'].push(product)

// to this
this.$store.commit('addProduct', {product})

...
// and in store
addProduct(state, {product}){
    state.products.push(product)
}
...

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

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

তো mutations, actionsতবুও কি পার্থক্য?

মিউটেশনগুলির মতো ক্রিয়াগুলিও স্টোরের মডিউলে থাকে এবং stateঅবজেক্টটি গ্রহণ করতে পারে । যা বোঝায় যে তারা সরাসরি এটিকে পরিবর্তন করতে পারে । সুতরাং উভয় থাকার মানে কি? যদি আমরা যুক্তি দিই যে মিউটেশনগুলি ছোট এবং সাধারণ রাখতে হয়, তবে এর থেকে বোঝা যায় যে আরও বিস্তৃত ব্যবসায়ের যুক্তি রাখতে আমাদের বিকল্প উপায় প্রয়োজন need ক্রিয়াগুলি এটি করার মাধ্যম। এবং যেহেতু আমরা আগে প্রতিষ্ঠিত করেছি, ভ্যু-ডেভলগুলি এবং প্লাগইনগুলি মিউটেশনগুলির মাধ্যমে পরিবর্তনের বিষয়ে সচেতন, ধারাবাহিক থাকার জন্য আমাদের ক্রিয়া থেকে মিউটেশনগুলি ব্যবহার করা উচিত। তদুপরি, যেহেতু ক্রিয়াকলাপগুলি সমস্ত পরিবেষ্টনশীল এবং যে যুক্তিটি তারা আবদ্ধ করে তা অবিচ্ছিন্ন হতে পারে, তাই এটি বোঝা যায় যে ক্রিয়াগুলি শুরু থেকেই কেবল অবিচ্ছিন্ন হয়ে উঠবে।

এটি প্রায়শই জোর দেওয়া হয় যে ক্রিয়াগুলি অ্যাসিক্রোনাস হতে পারে, তবে সাধারণত পরিবর্তনগুলি হয় না। আপনি পার্থক্যটিকে একটি ইঙ্গিত হিসাবে দেখার সিদ্ধান্ত নিতে পারেন যে কোনও পরিবর্তনমূলক সিনক্রোনাস (এবং অ্যাসিঙ্ক্রোনাসের জন্য ক্রিয়া) এর জন্য রূপান্তরগুলি ব্যবহার করা উচিত; তবে, আপনি কিছু অসুবিধাগ্রস্থ হয়ে পড়তে পারেন যদি উদাহরণস্বরূপ যদি আপনার একাধিক মিউটেশন (সমকালীনভাবে) করা দরকার হয়, বা যদি আপনার মিউটেশন থেকে গেটারের সাথে কাজ করার প্রয়োজন হয়, কারণ মিউটেশন ফাংশনগুলি গেটর বা মিউটেশনকে তর্ক হিসাবে গ্রহণ করে না ...

... যা একটি আকর্ষণীয় প্রশ্নের দিকে নিয়ে যায়।

মিউটেশনগুলি গেটারগুলি কেন পাবে না?

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

মিউটেশনগুলিকে গেটরদের সরাসরি অ্যাক্সেস করা থেকে বিরত করা মানে তিনটি জিনিসের মধ্যে এখন একটি প্রয়োজন, যদি আমাদের পূর্ববর্তী দ্বারা প্রদত্ত কিছু কার্যকারিতা থেকে অ্যাক্সেস করা প্রয়োজন: (১) হয় গেটারের সরবরাহকৃত রাষ্ট্রীয় গণনা কোথাও অনুলিপিযুক্ত যা অ্যাক্সেসযোগ্য মিউটেশন (খারাপ গন্ধ), বা (2) গণিত মান (বা প্রাসঙ্গিক গেটর নিজেই) মিউটেশন (ফানকি) এর সুস্পষ্ট যুক্তি হিসাবে ন্যস্ত করা হয়, বা (3) গেটারের যুক্তি নিজেই মিউটেশনের মধ্যে সরাসরি নকল করা হয় , গেটর (দুর্গন্ধ) দ্বারা সরবরাহিত হিসাবে ক্যাশে করার অতিরিক্ত সুবিধা ছাড়াই।

নিম্নলিখিতটি (2) এর উদাহরণ, যা বেশিরভাগ পরিস্থিতিতে আমি মুখোমুখি হয়েছি "কমপক্ষে খারাপ" বিকল্প বলে মনে হচ্ছে।

state:{
    shoppingCart: {
        products: []
    }
},

getters:{
    hasProduct(state){
        return function(product) { ... }
    }
}

actions: {
    addProduct({state, getters, commit, dispatch}, {product}){

        // all kinds of business logic goes here

        // then pull out some computed state
        const hasProduct = getters.hasProduct(product)
        // and pass it to the mutation
        commit('addProduct', {product, hasProduct})
    }
}

mutations: {
    addProduct(state, {product, hasProduct}){ 
        if (hasProduct){
            // mutate the state one way
        } else {
            // mutate the state another way 
        }
    }
}

আমার কাছে, উপরেরগুলি কেবল কিছুটা সংশ্লেষিত নয়, তবে কিছুটা "ফাঁসযুক্ত "ও দেখা যাচ্ছে, কারণ অ্যাকশনে উপস্থিত কিছু কোড স্পষ্টতই মিউটেশনের অভ্যন্তরীণ যুক্তি থেকে সরে আসছে।

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

আমি যা বিশ্বাস করি না তা হ'ল গেটার্সকে নিজের মিউটেশনগুলিতে পাঠানো অগত্যা একটি চিহ্ন যে আপনি কোনও ভুল করছেন। আমি এটিকে ফ্রেমওয়ার্কের একটি ত্রুটিগুলি কেবল "প্যাচিং" হিসাবে দেখছি।


1
আমার জন্য এটি সেরা উত্তর। কেবল এটি পড়ার পরে, আপনি যখন কিছু অনুভব করেছেন বলে মনে হয় তখন আমার এই "ক্লিক" হয়েছিল "
রবার্ট কুজনিয়ার

আগতরা মূলত computedআউটপুট হয় are এগুলি কেবল পঠনযোগ্য। মিউটেশনগুলি দেখার একটি দুর্দান্ত উপায় হ'ল আপনার থাকা অপসারণ if else। ভিউক্স ডক্স বলছে আপনি commitকোনও ক্রিয়াকলাপের মধ্যে 1 টিরও বেশি রাখতে পারবেন । সুতরাং এটি যুক্তিযুক্ত হতে পারে যে আপনি যুক্তির উপর নির্ভর করে কিছু পরিবর্তন করতে পারবেন। আমি কর্মগুলিকে আগুনে যা রূপান্তরিত করতে বাধ্য করার উপায় হিসাবে দেখি।
টাম্ব্ব

@ ট্যাম্ব: রাজ্য এবং প্রাপ্তরা উভয়ই প্রাসঙ্গিক ডেটা সরবরাহ করে। এটা বোঝা যায় যে কীভাবে রাজ্যকে সংশোধন করা যায় সে সিদ্ধান্ত নেওয়ার আগে তাদের জিজ্ঞাসা করা হবে। যখন তথ্যটি পুরোপুরি রাজ্য থেকে আনা যায়, তখন এটি উপলব্ধি করে যে পুরো যুক্তিটি একক পরিবর্তনের অভ্যন্তরে আবদ্ধ হবে, যেহেতু এটি রাজ্যে অ্যাক্সেস পেয়েছে। এটি একটি সেটারের জন্য স্ট্যান্ডার্ড অপারেটিং পদ্ধতি। যে বিষয়টি কম বোঝায় তা হ'ল একেবারে ভিন্ন দৃষ্টিভঙ্গি হ'ল কারণ এখন আমাদের অনুরূপ তথ্যের জন্য একজন গেটেরকে জিজ্ঞাসা করা দরকার।
মাইকেল একোকা

@ ট্যাম্ব: আপনি যা পরামর্শ দিচ্ছেন তা হ'ল যখন আমাদের গেটার্সকে জিজ্ঞাসা করা দরকার তখন আমাদের উপরের প্যাটার্নটি পরিবর্তন করা উচিত এবং নির্বাচনের যুক্তিটিকে একটি প্রক্সি অ্যাকশনে স্থানান্তর করা উচিত যা গেটরটি অ্যাক্সেস করতে পারে এবং একগুচ্ছ ক্ষুদ্র বোবা মিউটেশনগুলি আঠালো করে রাখতে পারে। এটি কাজ করে, তবে এটি এখনও সংক্রামক এবং আমার উত্তরে যে দুর্গন্ধের কথা আমি উল্লেখ করছি, এটি এটিকে অন্য কোথাও সরিয়ে দেয়।
মাইকেল একোকা

দস্তাবেজগুলি বলছে যে যখন আপনার গণনা স্থিতির প্রয়োজন তখন গিটারগুলি ব্যবহার করতে। সুতরাং এটি দিনটিকে সঠিক বলে মনে হয়েছিল তারা গণিত বৈশিষ্ট্যের সাথে সমান। ক্রিয়াটি মিউটেশনগুলিকে একসাথে আটকানো যেতে পারে বলে আপনি কী অর্জন করছেন k দস্তাবেজগুলি স্পষ্টভাবে ক্রিয়াগুলির মধ্যে ব্যবসায়িক যুক্তি রাখার জন্য বলে।
টাম্ব

15

আমি মনে করি টিএলডিআর উত্তর হ'ল মিউটেশনগুলি বোঝানো হচ্ছে সংক্রামক / লেনদেনের। সুতরাং আপনার যদি অ্যাজাক্স কল চালানোর প্রয়োজন হয় বা অন্য কোনও অ্যাসিঙ্ক্রোনাস কোড করার দরকার হয় তবে আপনাকে একটি অ্যাকশনে তা করতে হবে এবং তারপরে একটি নতুন পরিবর্তন স্থাপনের পরে কোনও পরিবর্তন করতে হবে।


1
এটি ডকুমেন্টেশনের সংক্ষিপ্তকরণের মতো দেখায়; এতে কোন ভুল নেই। যাইহোক, এই উত্তরের সমস্যাটি হ'ল এটি যা দাবি করে তা অবশ্যই সত্য নয় isn't অ্যাসিঙ্ক্রোনাস ফাংশন / এজেএক্সের অনুরোধ করার সময় আপনি কোনও রূপান্তরটির অভ্যন্তরে রাষ্ট্র পরিবর্তন করতে পারেন, এরপরে সম্পূর্ণ কলব্যাকে পরিবর্তন করা যেতে পারে। আমি ভয়েসের সাথে কাজ করার সময় কেন সর্বোত্তম বিকাশের অনুশীলনগুলির জন্য ক্রিয়াকলাপগুলি ব্যবহার করা উচিত তা নিয়ে এত বিভ্রান্তি ঘটছে বলে আমি মনে করি । আমি জানি যে ভুেক্সের সাথে কাজ শুরু করার সময় এটি অবশ্যই আমার জন্য বিভ্রান্তির কারণ ছিল।
এরুতান 409

8

ক্রিয়া এবং মিউটেশনগুলির মধ্যে প্রধান পার্থক্য:

  1. ক্রিয়াকলাপগুলির অভ্যন্তরে আপনি অ্যাসিক্রোনাস কোড চালাতে পারেন তবে রূপান্তরগুলিতে নয়। সুতরাং অ্যাসিক্রোনাস কোডের জন্য ক্রিয়াগুলি ব্যবহার করুন অন্যথায় মিউটেশনগুলি ব্যবহার করুন।
  2. ক্রিয়াকলাপের অভ্যন্তরে আপনি রাজ্যে অ্যাক্সেস করতে পারেন এমন মিউটেশনে গেটার, রাজ্য, রূপান্তর (তাদের প্রতিশ্রুতিবদ্ধ), ক্রিয়া (তাদের প্রেরণ) অ্যাক্সেস করতে পারেন। সুতরাং আপনি যদি রাজ্যে অ্যাক্সেস করতে চান তবে মিউটেশনগুলি ব্যবহার করুন অন্যথায় ক্রিয়াগুলি ব্যবহার করুন।

5

অনুযায়ী docs

ক্রিয়াগুলি রূপান্তরগুলির সাথে সমান , পার্থক্যগুলি হ'ল:

  • বদলে mutating রাষ্ট্র, কর্ম কমিট পরিব্যক্তি।
  • ক্রিয়াকলাপে নির্বিচারে অ্যাসিঙ্ক্রোনাস অপারেশন থাকতে পারে ।

নিম্নলিখিত স্নিপেট বিবেচনা করুন।

const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++               //Mutating the state. Must be synchronous
    }
  },
  actions: {
    increment (context) {
      context.commit('increment') //Committing the mutations. Can be asynchronous.
    }
  }
})

অ্যাকশন হ্যান্ডলারগুলি ( ইনক্রিমেন্ট ) একটি কনটেক্সট অবজেক্ট গ্রহণ করে যা স্টোরের ক্ষেত্রে একই পদ্ধতি / বৈশিষ্ট্যগুলির সমষ্টি প্রদর্শন করে, সুতরাং আপনি কনটেক্সট ডটমিটকে কোনও মিউটেশন করার জন্য কল করতে পারেন, বা কনটেক্সট.স্টেট এবং কনটেক্সট.জেটারের মাধ্যমে রাষ্ট্র এবং গেটারগুলিতে অ্যাক্সেস করতে পারেন can


1
'মিউটেশন' ফাংশন থেকে ভয়েজ উপাদান থেকে একটি পদ্ধতি কি কল?
আলবার্তো একুয়া

@ আলবার্তোআকুয়া আমার একই প্রশ্ন রয়েছে, কারণ যখন আমি এটি করার চেষ্টা করি তখন এটি একটি ত্রুটি ফেলে দেয় যে স্থানীয় রূপান্তর অপরিজ্ঞাত।
রটউইক গঙ্গুরদে

5

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

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

  • আমাদের অশুচি ইনপুট (অ্যাসিঙ্ক ফলাফল) হবে যা সেটটার এবং গেটারদের কারণ করেছিল। যৌক্তিকভাবে এবং বিভিন্ন অ্যাসিঙ্ক সেটটারগুলি এবং গ্রাহকরা আশ্চর্যরূপে ইন্টারঅ্যাক্ট করতে পারে তা অনুসরণ করা শক্ত। এটি mutationsলেনদেনের সাথে এখনও ঘটতে পারে তবে আমরা বলতে পারি যে লেনদেনের ক্রিয়াকলাপের প্রতিযোগিতার শর্ত হিসাবে এটির বিপরীতে উন্নতি হওয়া দরকার। কোনও ক্রিয়াকলাপের বেনামে পরিবর্তনগুলি আরও সহজেই এই ধরণের বাগগুলিকে পুনরায় উত্সাহিত করতে পারে কারণ অ্যাসিঙ্ক প্রোগ্রামিংটি ভঙ্গুর এবং কঠিন।
  • লেনদেনের লগটি পড়া শক্ত হবে কারণ রাষ্ট্র পরিবর্তনের কোনও নাম থাকবে না। এটি অনেক বেশি কোডের মতো এবং কম ইংরাজী হবে, মিউটেশনের লজিক্যাল গ্রুপিংগুলি অনুপস্থিত।
  • মিউটেশন ফাংশন কলের আগে এবং পরে - সিঙ্ক্রোনালি সংজ্ঞাযুক্ত ভিন্ন পয়েন্ট রয়েছে যেখানে এখন এর বিপরীতে এটি কোনও ডেটা অবজেক্টে কোনও রূপান্তর রেকর্ডিংয়ের উপকরণের পক্ষে কৌতুকপূর্ণ এবং কম পারফরম্যান্ট হতে পারে। সমস্যাটি কতটা বড় তা আমি নিশ্চিত নই।

নামান্তরিত মিউটেশনগুলির সাথে নিম্নলিখিত লেনদেন লগটির সাথে তুলনা করুন।

Action: FetchNewsStories
Mutation: SetFetchingNewsStories
Action: FetchNewsStories [continuation]
Mutation: DoneFetchingNewsStories([...])

কোনও লেনদেন লগ সহ যার নামকরণের কোনও মিউটেশন নেই:

Action: FetchNewsStories
Mutation: state.isFetching = true;
Action: FetchNewsStories [continuation]
Mutation: state.isFetching = false;
Mutation: state.listOfStories = [...]

আমি আশা করি আপনি সেই উদাহরণটি থেকে অ্যাসিঙ্কের সম্ভাব্য সংযোজন এবং ক্রিয়াকলাপের মধ্যে বেনামে পরিবর্তন আনতে পারবেন p

https://vuex.vuejs.org/en/mutations.html

এখন কল্পনা করুন আমরা অ্যাপটি ডিবাগ করছি এবং ডিভটোলের মিউটেশন লগগুলি দেখছি। লগ করা প্রতিটি মিউটেশনের জন্য, ডিভটোলকে রাষ্ট্রের একটি "আগে" এবং "পরে" স্ন্যাপশট ক্যাপচার করতে হবে। যাইহোক, উপরের উদাহরণের পরিবর্তনের মধ্যে অ্যাসিক্রোনাস কলব্যাকটি অসম্ভবকে সম্ভব করে তোলে: যখন রূপান্তরটি প্রতিশ্রুতিবদ্ধ হয় তখন কলব্যাকটি এখনও কল হয় না এবং কলব্যাকটি আসলে কখন ডাকা হবে তা জানতে ডিভটোলের কোনও উপায় নেই - কলব্যাকটিতে যে কোনও রাষ্ট্রীয় রূপান্তর ঘটেছিল মূলত অন-ট্র্যাকযোগ্য!


4

পরিব্যক্তি:

Can update the state. (Having the Authorization to change the state).

পদক্ষেপ:

Actions are used to tell "which mutation should be triggered"

রেডাক্স ওয়েতে

Mutations are Reducers
Actions are Actions

দুজনেই কেন ??

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


2

এটি আমাকেও বিভ্রান্ত করেছে তাই আমি একটি সাধারণ ডেমো তৈরি করেছি।

component.vue

<template>
    <div id="app">
        <h6>Logging with Action vs Mutation</h6>
        <p>{{count}}</p>
        <p>
            <button @click="mutateCountWithAsyncDelay()">Mutate Count directly with delay</button>
        </p>
        <p>
            <button @click="updateCountViaAsyncAction()">Update Count via action, but with delay</button>
        </p>
        <p>Note that when the mutation handles the asynchronous action, the "log" in console is broken.</p>
        <p>When mutations are separated to only update data while the action handles the asynchronous business
            logic, the log works the log works</p>
    </div>
</template>

<script>

        export default {
                name: 'app',

                methods: {

                        //WRONG
                        mutateCountWithAsyncDelay(){
                                this.$store.commit('mutateCountWithAsyncDelay');
                        },

                        //RIGHT
                        updateCountViaAsyncAction(){
                                this.$store.dispatch('updateCountAsync')
                        }
                },

                computed: {
                        count: function(){
                                return this.$store.state.count;
                        },
                }

        }
</script>

store.js

import 'es6-promise/auto'
import Vuex from 'vuex'
import Vue from 'vue';

Vue.use(Vuex);

const myStore = new Vuex.Store({
    state: {
        count: 0,
    },
    mutations: {

        //The WRONG way
        mutateCountWithAsyncDelay (state) {
            var log1;
            var log2;

            //Capture Before Value
            log1 = state.count;

            //Simulate delay from a fetch or something
            setTimeout(() => {
                state.count++
            }, 1000);

            //Capture After Value
            log2 = state.count;

            //Async in mutation screws up the log
            console.log(`Starting Count: ${log1}`); //NRHG
            console.log(`Ending Count: ${log2}`); //NRHG
        },

        //The RIGHT way
        mutateCount (state) {
            var log1;
            var log2;

            //Capture Before Value
            log1 = state.count;

            //Mutation does nothing but update data
            state.count++;

            //Capture After Value
            log2 = state.count;

            //Changes logged correctly
            console.log(`Starting Count: ${log1}`); //NRHG
            console.log(`Ending Count: ${log2}`); //NRHG
        }
    },

    actions: {

        //This action performs its async work then commits the RIGHT mutation
        updateCountAsync(context){
            setTimeout(() => {
                context.commit('mutateCount');
            }, 1000);
        }
    },
});

export default myStore;

এগুলি অনুসন্ধান করার পরে, আমি যে সিদ্ধান্তে পৌঁছেছি তা হল যে মিউটেশনগুলি কেবলমাত্র পৃথক পৃথক উদ্বেগের জন্য ডেটা পরিবর্তন করার জন্য এবং আপডেট করা তথ্যের আগে এবং পরে লগিংয়ের উন্নতির জন্য ডেটা পরিবর্তন করার উপর দৃষ্টি নিবদ্ধ করে একটি কনভেনশন। ক্রিয়াকলাপগুলি বিমূর্ততার একটি স্তর যা উচ্চ স্তরের যুক্তি পরিচালনা করে এবং তারপরে পরিবর্তনকে যথাযথভাবে ডাকে


0

1. দস্তাবেজ থেকে :

ক্রিয়াগুলি রূপান্তরগুলির সাথে সমান, পার্থক্যগুলি হ'ল:

  • রাষ্ট্রকে পরিবর্তিত করার পরিবর্তে, ক্রিয়াগুলি রূপান্তর করে।
  • ক্রিয়াকলাপে নির্বিচারে অ্যাসিঙ্ক্রোনাস অপারেশন থাকতে পারে।

অ্যাকশনে অ্যাসিক্রোনাস অপারেশন থাকতে পারে, তবে রূপান্তর করতে পারে না।

২. আমরা রূপান্তরকে অনুরোধ করি, আমরা সরাসরি রাষ্ট্র পরিবর্তন করতে পারি। এবং আমরা এর দ্বারা রাষ্ট্রগুলি পরিবর্তন করতেও এই পদক্ষেপ নিতে পারি:

actions: {
  increment (store) {
    // do whatever ... then change the state
    store.dispatch('MUTATION_NAME')
  }
}

অ্যাকশনগুলি আরও অন্যান্য জিনিস পরিচালনা করার জন্য ডিজাইন করা হয়েছে, আমরা সেখানে অনেকগুলি কাজ করতে পারি (আমরা অ্যাসিনক্রোনাস অপারেশনগুলি ব্যবহার করতে পারি) তারপরে সেখানে প্রেরণের পরিবর্তনের মাধ্যমে রাষ্ট্র পরিবর্তন করতে পারি।


0

কারণ কোনও মিউটেশন ছাড়া কোনও রাষ্ট্র নেই! যখন কমিট করা হয় - একটি যুক্তিযুক্ত টুকরো, যা অদূরূপে রাষ্ট্র পরিবর্তন করে, কার্যকর করা হয়। মিউটেশনগুলি রাষ্ট্র সেট বা পরিবর্তনের একমাত্র উপায় (যাতে সরাসরি কোনও পরিবর্তন হয় না!) এবং তদ্ব্যতীত - সেগুলি অবশ্যই সমন্বয়ী হতে হবে। এই সমাধানটি একটি খুব গুরুত্বপূর্ণ কার্যকারিতা চালায়: মিউটেশনগুলি ডিভলগুলিতে লগইন হয়। এবং এটি আপনাকে একটি দুর্দান্ত পাঠযোগ্যতা এবং পূর্বাভাসযোগ্যতা সরবরাহ করে!

আরও একটি জিনিস - ক্রিয়া। যেমনটি বলা হয়েছে - ক্রিয়াগুলি পরিবর্তন ঘটায়। সুতরাং তারা স্টোর পরিবর্তন করে না এবং এগুলি সমকালীন হওয়ার দরকার নেই। তবে, তারা অ্যাসিক্রোনাস যুক্তির একটি অতিরিক্ত অংশ পরিচালনা করতে পারে!


0

actionsকেবলমাত্র কল করার mutationsজন্য অতিরিক্ত স্তর থাকা অপ্রয়োজনীয় বলে মনে হতে পারে , উদাহরণস্বরূপ:

const actions = {
  logout: ({ commit }) => {
    commit("setToken", null);
  }
};

const mutations = {
  setToken: (state, token) => {
    state.token = token;
  }
};

actionsকল যদি কল হয় logout, কেন নিজেই এই কলটি কল?

কোনও ক্রিয়াকলাপের সম্পূর্ণ ধারণাটি হ'ল একটি ক্রিয়াকলাপের ভিতরে থেকে একাধিক রূপান্তরকে কল করা বা একটি অ্যাজাক্স অনুরোধ বা কোনও ধরণের অ্যাসিনক্রোনাস যুক্তি যা আপনি কল্পনা করতে পারেন make

আমাদের শেষ পর্যন্ত এমন ক্রিয়া থাকতে পারে যা একাধিক নেটওয়ার্ক অনুরোধ করে এবং শেষ পর্যন্ত অনেকগুলি পৃথক রূপান্তরকে কল করে।

সুতরাং আমরা আমাদের থেকে আমাদের Vuex.Store()যতটা সম্ভব জটিলতা থেকে স্টাফ করার চেষ্টা করি actionsএবং এটি আমাদের mutations, stateএবং gettersপরিষ্কার এবং সোজাসাপ্টা এবং ভ্যু এবং রিএ্যাক্টের মতো লাইব্রেরিগুলিকে জনপ্রিয় করে তোলে এমন মডুলারিটির সাথে সামঞ্জস্য হয়।


0

আমি প্রায় 3 বছর ধরে ভিউক্সকে পেশাদারভাবে ব্যবহার করে আসছি এবং আমি এখানে আমার মনে করি ক্রিয়া এবং মিউটেশনের মধ্যে প্রয়োজনীয় পার্থক্য সম্পর্কে আমি কী বুঝতে পেরেছি, এগুলি একসাথে ভালভাবে ব্যবহার করে আপনি কীভাবে উপকৃত হতে পারেন এবং আপনি কীভাবে আপনার জীবনকে আরও শক্ত করে তুলতে পারেন এটি ভাল ব্যবহার করবেন না।

ভয়েসের মূল লক্ষ্য হল আপনার আবেদনের আচরণ নিয়ন্ত্রণ করার জন্য একটি নতুন প্যাটার্ন দেওয়া: প্রতিক্রিয়া। ধারণাটি হ'ল আপনার অ্যাপ্লিকেশনটির রাজ্যের অর্কেস্ট্রেশনটি কোনও বিশেষায়িত কোনও সামগ্রীতে: অফলোড করা। এটি আপনার উপাদানগুলিকে তাদের নিজস্ব সুবিধার্থে ব্যবহার করার জন্য সরাসরি আপনার স্টোরের ডেটাতে সংযুক্ত করার জন্য পদ্ধতিগুলি সরবরাহ করে। এটি আপনার উপাদানগুলিকে তাদের কাজের উপর ফোকাস করতে দেয়: একটি টেম্পলেট, শৈলী এবং আপনার ব্যবহারকারীর কাছে উপস্থাপনের জন্য মৌলিক উপাদান আচরণের সংজ্ঞা দেয়। এদিকে, স্টোর ভারী ডেটা লোড পরিচালনা করে।

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

মূল ধারণাটি হ'ল:

  • স্টোরটির অভ্যন্তরীণ অবস্থা রয়েছে, যা কখনই উপাদান দ্বারা সরাসরি অ্যাক্সেস করা উচিত নয় (মানচিত্রের স্টেট কার্যকরভাবে নিষিদ্ধ)
  • স্টোরটিতে মিউটেশন রয়েছে যা অভ্যন্তরীণ স্থিতির সাথে সংলগ্ন পরিবর্তন। পরিবর্তনের একমাত্র কাজ হ'ল রাষ্ট্রটি পরিবর্তন করা। তাদের কেবল একটি ক্রিয়া থেকে ডাকা উচিত। রাজ্যের সাথে সংঘটিত জিনিসগুলি বর্ণনা করার জন্য তাদের নাম দেওয়া উচিত (ORDER_CANCELED, ORDER_CREATED)। এগুলি সংক্ষিপ্ত এবং মিষ্টি রাখুন। আপনি ভ্য ডিভলটুল ব্রাউজার এক্সটেনশন ব্যবহার করে তাদের মাধ্যমে পদক্ষেপ নিতে পারেন (এটি ডিবাগিংয়ের জন্যও দুর্দান্ত!)
  • স্টোরটিতে ক্রিয়াও রয়েছে, যা অসম্পূর্ণ হওয়া উচিত বা কোনও প্রতিশ্রুতি ফিরিয়ে আনতে হবে। এগুলি সেই ক্রিয়া যা আপনার উপাদানগুলি যখন অ্যাপ্লিকেশনের স্থিতিটি পরিবর্তন করতে চাইবে তখন কল করবে call ব্যবসায়িক ওরিয়েন্টেড ক্রিয়াগুলির সাথে তাদের নামকরণ করা উচিত (ক্রিয়াপদ, অর্থাৎ বাতিল করা অর্ডার, ক্রিয়েটআর্ডার)। আপনি এখানে আপনার অনুরোধগুলি যাচাই করে প্রেরণ করেন। রাষ্ট্র পরিবর্তন করার প্রয়োজন হলে প্রতিটি ক্রিয়া বিভিন্ন পদক্ষেপে বিভিন্ন কমিটকে কল করতে পারে।
  • অবশেষে, স্টোরটিতে গেটর রয়েছে, যা আপনার উপাদানগুলিতে আপনার রাষ্ট্রকে প্রকাশ করতে আপনি যা ব্যবহার করেন। আপনার অ্যাপ্লিকেশনটি প্রসারিত হওয়ার সাথে সাথে সেগুলি অনেকগুলি উপাদান জুড়ে প্রচুর ব্যবহার করা হবে বলে আশা করুন। অকেজো গণনা চক্র এড়াতে ভয়েস ক্যাশগুলি প্রচুর পরিমাণে পাওয়া যায় (যতক্ষণ না আপনি আপনার গেটারে প্যারামিটার যুক্ত করবেন না - প্যারামিটারগুলি ব্যবহার না করার চেষ্টা করুন) তাই এগুলি ব্যাপকভাবে ব্যবহার করতে দ্বিধা করবেন না। কেবলমাত্র নিশ্চিত হয়ে নিন যে আপনি বর্তমানে এমন নাম দিয়েছেন যা অ্যাপ্লিকেশনটি বর্তমানে কী অবস্থায় রয়েছে তা যতটা সম্ভব বর্ণনা করা যায়।

বলা হচ্ছে, যাদুটি শুরু হয় যখন আমরা এই পদ্ধতিতে আমাদের অ্যাপ্লিকেশনটির নকশা শুরু করি। উদাহরণ স্বরূপ:

  • আমাদের একটি উপাদান রয়েছে যা ব্যবহারকারীর কাছে সেই আদেশগুলি মোছার সম্ভাবনার সাথে একটি আদেশের তালিকা সরবরাহ করে
  • উপাদানগুলি স্টোর গেটর (ডিলেটেবল অর্ডারস) ম্যাপ করেছে, যা আইডিসহ বস্তুর একটি অ্যারে
  • অর্ডারগুলির প্রতিটি সারিটিতে উপাদানটির একটি বোতাম রয়েছে এবং এর ক্লিকটি স্টোর অ্যাকশনে ম্যাপ করা হয় (মুছে ফেলা) যা অর্ডার অবজেক্টটিকে এতে পাস করে (যা আমরা মনে রাখব, স্টোরের তালিকা থেকেই আসে)
  • স্টোর ডিলিট অর্ডার ক্রিয়াটি নিম্নলিখিতটি করে:
    • এটি মোছার বৈধতা দেয়
    • এটি অস্থায়ীভাবে মোছার জন্য অর্ডার সঞ্চয় করে
    • এটি অর্ডার সহ ORDER_DELETED রূপান্তর করে its
    • এটি অর্ডারটি মুছে ফেলার জন্য API কল প্রেরণ করে (হ্যাঁ, রাষ্ট্র পরিবর্তন করার পরে!)
    • এটি কলটি শেষ হওয়ার অপেক্ষায় রয়েছে (রাষ্ট্রটি ইতিমধ্যে আপডেট হয়েছে) এবং ব্যর্থতার পরে আমরা অর্ডার রেখেছি যার সাথে আমরা আগে রেখেছিলে ORDER_DELETE_FAILED মিউটেশনটি কল করি।
  • ORDER_DELETED মিউটেশনটি প্রেরণযোগ্য আদেশের তালিকা থেকে প্রদত্ত ক্রমটি সরিয়ে ফেলবে (যা প্রাপ্তিকে আপডেট করবে)
  • ORDER_DELETE_FAILED রূপান্তর এটিকে কেবল পিছনে ফেলে দেয় এবং ত্রুটিটি অবহিত করার জন্য বিবরণী পরিবর্তন করে (অন্য উপাদান, ত্রুটি-বিজ্ঞপ্তি, কখন নিজেকে প্রদর্শন করতে হবে তা জানতে রাষ্ট্রটিকে ট্র্যাক করবে)

শেষ পর্যন্ত, আমাদের ব্যবহারকারীর অভিজ্ঞতা রয়েছে যা "প্রতিক্রিয়াশীল" হিসাবে বিবেচিত। আমাদের ব্যবহারকারীর দৃষ্টিকোণ থেকে, আইটেমটি অবিলম্বে মুছে ফেলা হয়েছে। বেশিরভাগ সময়, আমরা আমাদের শেষ পয়েন্টগুলি কেবলমাত্র কাজ করার আশা করি, তাই এটি নিখুঁত। যখন এটি ব্যর্থ হয়, তখনও আমাদের প্রয়োগটি কীভাবে প্রতিক্রিয়া জানাবে তার উপর আমাদের কিছুটা নিয়ন্ত্রণ রয়েছে , কারণ আমরা আসল তথ্য সহ সফলভাবে আমাদের ফ্রন্ট-এন্ড অ্যাপ্লিকেশনটির অবস্থার উদ্বেগকে আলাদা করেছি।

আপনার সবসময় কোনও স্টোরের দরকার নেই, মনে রাখবেন। যদি আপনি দেখতে পান যে আপনি এমন স্টোরগুলি লিখেছেন যা দেখতে দেখতে এটি:

export default {
  state: {
    orders: []
  },
  mutations: {
    ADD_ORDER (state, order) {
       state.orders.push(order)
    },
    DELETE_ORDER (state, orderToDelete) {
       state.orders = state.orders.filter(order => order.id !== orderToDelete.id)
    }
  },
  actions: {
    addOrder ({commit}, order) {
      commit('ADD_ORDER', order)
    },
    deleteOrder ({commit}, order) {
      commit('DELETE_ORDER', order)
    }
  },
  getters: {
    orders: state => state.orders
  }
}

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

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