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

مشكلة فى useState "وضع القيمة القديمة بدلا من الجديدة أو الحاجة الى الضغط على الزر مرتين حتى يعمل set للقيمة الجديدة" 

أحمد عبد الله2

السؤال

السلام عليكم .. مشكلة فى useState "وضع القيمة القديمة بدلا من الجديدة أو الحاجة الى الضغط على الزر مرتين حتى يعمل set للقيمة الجديدة" 

أريد ان عندما اضغط على الزر يقوم التطبيق بتخزين القيمة الجديدة وليست القديمة عند الضغط مرة واحدة دون الحاجة الى الضغط مرتين.. هذا هو الكود 

 

SetItem

import AsyncStorage from '@react-native-async-storage/async-storage';

export default function App() {
  const [wantNotification, setWantNotification] = useState('NO');

  // Async Storage Saving Yes for Notifications
  const storeNotificationAsync = async wantNotification => {
    try {
      await AsyncStorage.setItem('wantNotification', wantNotification);
      setWantNotification('YES'); // I Need to press twice becuase when I press the first time Async Storage store "No"
    } catch (e) {
      console.log(e);
    }
  };

 

GetItem

const getNotificationAsync = async () => {
    try {
      const value = await AsyncStorage.getItem('wantNotification');
      if (value !== null) {
        console.log(value);
        // It Logs "NO" If i press one time In the Alert
      }
    } catch (e) {}
  };

 

Alert

const createAlert = () =>
    Alert.alert(
      'Notifications',
      'Do You Want Notifications',
      [
        {
          text: 'Cancel',
          onPress: () => console.log('Cancel Pressed'),
          style: 'cancel',
        },
        {
          text: 'OK',
          onPress: async () => {
            await storeNotificationAsync(wantNotification);
            await console.log(wantNotification);
          },
        },
      ],
      {cancelable: false},
    );
}

 

من المفترض انه عندما اضغط على OK اى أقبل ال Alert انه يقوم بتخزين القيمة Yes داخل ال Async storage ولكن يجب ان ضغط مرتين ..
 

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

Recommended Posts

  • 0

من الطبيعي أن يحدث ما تقوله حيث أنك قمت بتخزين قيمة wantNotification مبدئياً ب No لذلك عند الضغط على الزر أول مرة سيتم تخزين القيمة No في ال AsyncStorage ولكن عند الضغط المرة الثانية سيكون قد تم تغيير القيمة من خلال 

setWantNotification('YES');

لذلك في المرة الثانية سيتم تخهزين القيمة Yesفي ال AsyncStorage لذلك جرب القيام بالتعديل التالي وسترى أنه يقوم بتخزين القيمة Yes من أول مرة

{
  text: 'OK',
    onPress: async () => {
      await storeNotificationAsync("yes"); //لاحظ هذا التعديل
      await console.log(wantNotification);
    },
},

ستفهم طريقة تنفيذ الكود بعد التعديل و يمكنك بعد ذلك التعديل على البرنامج كما تريد 

تم التعديل في بواسطة عبدالباسط ابراهيم
خطأ إملائي
رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...