دریافت مقادیر از store در vue vite

تعداد بازدید ها : 20 بازدید
 دریافت مقادیر از store در vue vite

توجه داشته باشید که در Vue.js 3 با استفاده از Vite، وقتی مقادیری را از یک store (مانند Vuex یا Pinia) دریافت می‌کنید، به طور کلی این مقادیر به روش ByRef (با ارجاع) دریافت می‌شوند. این بدان معناست که اگر مقدار دریافتی یک شیء یا آرایه باشد، تغییرات انجام شده بر روی این مقادیر در کامپوننت، به طور مستقیم بر روی مقدار اصلی در store تاثیر می‌گذارد.

برای مثال، اگر از Vuex استفاده می‌کنید و یک شیء را از store دریافت می‌کنید:

// در فایل store.js
const store = new Vuex.Store({
  state: {
    user: {
      name: 'John',
      age: 30
    }
  },
  getters: {
    getUser: state => state.user
  }
});

export default store;

و در یک کامپوننت Vue:

<template>
  <div>
    {{ user.name }} - {{ user.age }}
  </div>
</template>

<script>
import { mapGetters } from 'vuex';

export default {
  computed: {
    ...mapGetters(['getUser']),
    user() {
      return this.getUser;
    }
  }
};
</script>

در اینجا، user که از store دریافت شده است، به روش ByRef دریافت می‌شود. بنابراین اگر شما تغییراتی در user در کامپوننت انجام دهید، این تغییرات مستقیماً در store نیز منعکس می‌شود.

اگر بخواهید مقادیر را به روش ByVal (به‌صورت کپی) دریافت کنید تا تغییرات در کامپوننت تاثیری بر مقدار اصلی در store نداشته باشد، می‌توانید از توابعی مثل JSON.parse(JSON.stringify()) یا استفاده از lodash برای ایجاد یک کپی عمیق استفاده کنید:

user() {
  return JSON.parse(JSON.stringify(this.getUser));
}

یا با استفاده از lodash:

import _ from 'lodash';

user() {
  return _.cloneDeep(this.getUser);
}

این روش‌ها تضمین می‌کنند که مقادیر به‌صورت کپی دریافت می‌شوند و تغییرات در کامپوننت تاثیری بر مقادیر اصلی در store نخواهد داشت.

می خوانم   آشنایی با کتابخانه lodash

البته من از روش کپی مستقیم بسیار استفاده می کنم . این روش وقتی از یک store فرم های متعدد استفاده می کنند و مایلید تغییرات در یکی از فرم ها در اطلاعات سایر فرم ها نیز اثر بگذارد بسیار کاربردی است .

به عنوان مثال : فرم شرح حساب ها باز است و همزمان در فرم ثبت سند جدید ، شرح جدیدی درج می گردد . در این لحظه اگر به فرم شرح حساب ها نگاه کنید ، شرح جدید به لیست اضافه شده است بدون اینکه نیاز باشد اطلاعات را مجدد از سرور بارگیری نمایید .

مثال دیگر : سبد خرید در یک سایت فروشگاهی است . وقتی سبد خرید در یک تب باز است و از تب دیگر به سبد خرید کالایی اضافه و یا از آن حذف می شود ، اثر این کار را در تب سبد خرید می توانید مشاهده کنید . ( یکی از قابلیت های بسیار جذاب vue خصوصیت اینتراکتیو بدون آن است به معنی اینکه به محض تغییر در داده ها ، DOM به صورت خودکار بروزرسانی شده و تغییرات در مرورگر کاربر قابل مشاهده است )

منبع : Microsoft Copilot

متن سوال :

  • در محیط vue.js 3 vite وقتی از یک store مقداری رو دریافت می کنم آیا به روش BayRef مقدار ارسال می شود یا ByVal ؟
0
محمدمجتبی جوارشکیان

محمدمجتبی جوارشکیان

من محمدمجتبی جوارشکیان ، کارشناس IT و فعال اجتماعی هستم و در حوزه معماری ، طراحی ، تحلیل گری ، مدلسازی و توسعه ی محیط های نرم افزاری فعالیت دارم. همانند سایر کارشناسان IT در تلاشم تا دنیا جای زیباتری برای زندگی باشد. بسیار خوشحال می شوم من را از انتقادات ، پیشنهادات و نظرات خود مطلع فرمایید. آدرس ایمیل : mjfakhr@yahoo.com

ارسال یک پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

ده + شش =