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

التنقل و تحديث حالة الأب - React Navigation

Yomna Raouf

السؤال

لدي screen  و أريد أن أعرض بها رسالة ترحيب مع اسم المستخدم عندما يكون هذا المستخدم مُسجِّل للدخول. 

و لدي صفحة أخرى تقوم بعرض خيارين للمُستخدم أحدهما  "تسجيل الدخول" و الآخر "إنشاء حساب". و عندما تتم عملية تسجيل الدخول أو إنشاء الحساب بنجاح يتم نقله إلى الصفحة  السابق ذكرها.

حاليًا أقوم بتخزين بيانات المسخدم باستخدام AsyncStorage،  و أريد تحديث بيانات هذا الحقل عندما تتم عملية تسجيل الدخول أو إنشاء الحساب بنجاح:

 P2aGy.png.293b130ddaca8bcd241cfdee42b2d041.png

كيف يمكن تنفيذ هذا الأمر؟

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

يمكن عمل Authentication بطريقة سهلة عن طريق SecureStore من مكتبة Expo، وتوفير التواصل بين المكونات عن طريق useReducer.

import * as React from 'react';
import * as SecureStore from 'expo-secure-store';

export default function App({ navigation }) {
  const [state, dispatch] = React.useReducer(
    (prevState, action) => {
      switch (action.type) {
        // حالة تسجيل الدخول
        case 'SIGN_IN':
          return {
            ...prevState,
            isSignout: false,
            userToken: action.token,
          };
        // حالة تسجيل الخروج
        case 'SIGN_OUT':
          return {
            ...prevState,
            isSignout: true,
            userToken: null,
          };
      }
    },
    {
      isLoading: true,
      isSignout: false,
      userToken: null,
    }
  );

  React.useEffect(() => {
    // نقوم بقراءة الـ token والتحرك حسب قيمتها
    const bootstrapAsync = async () => {
      let userToken;

      try {
        userToken = await SecureStore.getItemAsync('userToken');
      } catch (e) {
      }

      // هنا سنقوم بالتحويل لشاشة التسجيل او التطبيق وبعدها سنغلق التحميل
      dispatch({ type: 'RESTORE_TOKEN', token: userToken });
    };

    bootstrapAsync();
  }, []);

  const authContext = React.useMemo(
    () => ({
      signIn: async data => {
		// عمل تسجيل الدخول
        dispatch({ type: 'SIGN_IN', token: 'dummy-auth-token' });
      },
      signOut: () => dispatch({ type: 'SIGN_OUT' }),
      signUp: async data => {
        dispatch({ type: 'SIGN_IN', token: 'dummy-auth-token' });
      },
    }),
    []
  );

  // ستجد هنا يتم رسم المسار على حسب قيمة الـ token
  return (
    <AuthContext.Provider value={authContext}>
      <Stack.Navigator>
        {state.userToken == null ? (
          <Stack.Screen name="SignIn" component={SignInScreen} />
        ) : (
          <Stack.Screen name="Home" component={HomeScreen} />
        )}
      </Stack.Navigator>
    </AuthContext.Provider>
  );
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...