اذهب إلى المحتوى

السؤال

نشر

السلام عليكم.

في الكود التالي:

function DashboardScreen() {
  const { profile } = useSelector((state) => state.profile);
  
  return (
    <div className="mt-16">
      {profile.length === 0 ? (
        <>
          <Title>Dashboard</Title>
          <div className="mx-4 mb-4 lg:mx-8">
            <p className="text-lg text-zinc-800 my-4">
              You have not yet setup a profile, please add some info.
            </p>
            <Button>
              <Link to="/dashboard/create-profile">Create Profile</Link>
            </Button>
          </div>
        </>
      ) : (
        <>
          <MyComponent/>
        </>
      )}
    </div>
  );
}

export default DashboardScreen;

في البداية كل شيء تمام.

لكن عندما أقوم بتحديث الصفحة يكون طول المصفوفة صفر.

الرجاء المساعدة.

 

Recommended Posts

  • 0
نشر

بما أنك تستخدم Redux Toolki  لإدارة الحالة الخاصة بالموقع  وفى بادئ الأمر لم تحصل على بيانات المصفوفة من الواجهة البرمجية API SERVER أو من خلال التخزين المحلى localstorage مثلا وتقوم بالإضافة بنفسك إلى المصفوفة وهذا كله يتم على المتصفح ولا تضيف إلى المصفوفة فى قاعده البيانات أو التخزين المحلى فبالتأكيد عند عمل تحديث للصفحة تكون المصفوفة فارغة. 

  • 0
نشر

إذا كنت تستخدم Redux Toolkit لإدارة الحالة الخاصة بالتطبيق الخاص بك وتقوم بإضافة البيانات محليًا دون الرجوع إلى واجهة برمجة التطبيقات (API) أو التخزين المحلي، فسيتم فقدان البيانات عند تحديث الصفحة أو إعادة تحميلها.

لحل هذه المشكلة، يجب عليك البحث عن طرق للحفاظ على البيانات المضافة محليًا بين جلسات التصفح. يمكن القيام بذلك عن طريق استخدام التخزين المحلي مثل LocalStorage أو IndexedDB للحفاظ على البيانات على مستوى المتصفح.

في Redux Toolkit، يمكنك استخدام middleware مثل redux-persist لتحقيق هذا الغرض. يقوم redux-persist بتخزين حالة Redux في التخزين المحلي بطريقة تلقائية، مما يسمح باستعادة حالة التطبيق عند إعادة تحميل الصفحة.

في النهاية، يمكنك استخدام المصفوفة المحلية كحالة افتراضية في Redux، ثم استخدام redux-persist للحفاظ على هذه البيانات بين جلسات التصفح. هذا يسمح لك بالاستفادة من قوة Redux في إدارة الحالة مع الحفاظ على البيانات المهمة عبر عمليات إعادة التحميل وإغلاق المتصفح.

يمكنك تصفح هذه المصادر: 

 

  • 0
نشر
بتاريخ 3 دقائق مضت قال Mustafa Mahmoud7:

بما أنك تستخدم Redux Toolki  لإدارة الحالة الخاصة بالموقع الخاص بك وفى بادئ الأمر لم تحصل على بيانات المصفوفة من الواجهة البرمجية API SERVER أو من خلال التخزين المحلى localstorage مثلا وتقوم بالإضافة بنفسك إلى المصفوفة وهذا كله يتم على المتصفح ولا تضيف إلى المصفوفة فى قاعده البيانات أو التخزين المحلى فبالتأكيد عند عمل تحديث تكون المصفوفة فارغة. 

هذه هي profileSlice

const profileSlice = createSlice({
  name: "profile",
  initialState: {
    profile: [],
    loading: false, 
    isProfileCreated: false,
  },
  reducers: {
    setProfile(state, action) {
        state.profile = action.payload
    },
    setLoading(state) {
        state.loading = true
    },
    clearLoading(state) {
        state.loading = false
    },
    setIsProfileCreated(state) {
        state.isProfileCreated = true;
        state.loading = false
    },
    clearIsProfileCreated(state) {
        state.isProfileCreated = false;
    },
    addExperience(state, action) {
      state.profile.experience = action.payload
    }
  },
});

profileApiCall

export function createProfile(newProfile) {
    return async(dispatch, getState) => {
        try {
            dispatch(profileActions.setLoading())
            const { data } = await axios.post(PROFILE_URL, newProfile, {
                headers: {
                    'x-auth-token': getState().auth.user.token
                }
            })
            dispatch(profileActions.setProfile(data))
            dispatch(profileActions.setIsProfileCreated())
            setTimeout(
              () => dispatch(profileActions.clearIsProfileCreated()),
              2000
            );
        } catch (error) {
            const err = error.response?.data.msg
            if (err) {
                dispatch(alertActions.createAlert(err));
                dispatch(alertActions.clearAlert(err));
            }

            const errors = error.response.data.errors 
            errors?.forEach((err) => {
                dispatch(alertActions.createAlert(err.msg));
                dispatch(alertActions.clearAlert(err.id));
            });
            dispatch(profileActions.clearLoading())
        }
    }
}

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...