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

استفسار من مشكله في ReactNative

Ahmed Kawbal

السؤال

لدي ثلاث واجههات شاشات  اثنتين يتم فيهن ادخال بيانات  وحفظها في الذاكره المحليه للهاتف  والواجهه الثالثه تقوم بعرض ماتم حفظه في الذاكره المحليه   من الواجهتاهن السابقات  ....

  ولكن المشكله ..

  عند ادخال بيانات من الواجهه الاولى وحفظها تظهر في الواجهه الثالثه بدون مشاكل  ولاكن اذا ادخلت بيانات من الواجهه الثانيه وتم الحفظ تختفي البيانات التي تم حفظها الخاصه بالواجهه الاولى    وتظهر البيانات الخاصه بالواجهه الثانيه

فلم افهم ما السبب  

بالمناسبه الحفظ ب                      await AsyncStorage.setItem('note',da)  للواجهتان  بنفس الاسم للحفظ 'note'   

اما العرض في الشاشه الثالثه  يتم بمكون  فيه map  لعرض البيانات تحت بعض كمصفوفه

 

 

فماذا يجب عليا ان اعمل

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

Recommended Posts

  • 0

أرى انك تتطور في البرنامج الخاص بك وهذا جيد جدا لأنك تحاول بنفسك,أما عن هذه المشكلة , فأنك تقوم بحفظ المدخلات بنفس الاسم 'note' 
حاول تغيير الاسم لواحدة من شاشات العرض وقم بعرضهم في الشاشة الثالثة

أو إذا كنت تستطيع تصوير الكود فسيكون أفضل

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

  • 0
بتاريخ 31 دقائق مضت قال Nagmar ناجمار:

أرى انك تتطور في البرنامج الخاص بك وهذا جيد جدا لأنك تحاول بنفسك,أما عن هذه المشكلة , فأنك تقوم بحفظ المدخلات بنفس الاسم 'note' 
حاول تغيير الاسم لواحدة من شاشات العرض وقم بعرضهم في الشاشة الثالثة

أو إذا كنت تستطيع تصوير الكود فسيكون أفضل

نعم نجح هاذا ولاكن لدي مشكله  ...

  عند الادخال والحفظ بالنسبه للشاشتان يتم ذالك يتم عرض معلومات الاتيه من الشاشتان  ولاكن  بعد الدخول للشاشه الثالثه  والرجوع الى اي من الشاشتان الوله او الثانيه واضافه بيانات جديده يتم الحفظ والعرض في الثالثه ولاكن لا تبقى البيانات السابقه الخاصه بالشاشه التي تم فيها اخر عمليه حفظ او ادخال  ...

 بامختصر  ..  اي انه لا تبقى البيانات السابقه في المصفوفه  الخاصه بعمليه عند جلب البيانات الجديده من الذاكره  

 

هل ذالك بسبب انني اقوم بتشغيل البرنامج على هاتف خارجي عبر تطبيق expo   

اي انه لو تم تثبيته ك apk في الهاتف هل سوف تحل المشكله   ام انه لا علاقه بذالك

 

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

  • 0
بتاريخ 6 دقائق مضت قال ahmedkawbal:

نعم نجح هاذا ولاكن لدي مشكله  ...

  عند الادخال والحفظ بالنسبه للشاشتان يتم ذالك يتم عرض معلومات الاتيه من الشاشتان  ولاكن  بعد الدخول للشاشه الثالثه  والرجوع الى اي من الشاشتان الوله او الثانيه واضافه بيانات جديده يتم الحفظ والعرض في الثالثه ولاكن لا تبقى البيانات السابقه الخاصه بالشاشه التي تم فيها اخر عمليه حفظ او ادخال  ...

 بامختصر  ..  اي انه لا تبقى البيانات السابقه في المصفوفه  الخاصه بعمليه عند جلب البيانات الجديده من الذاكره  

 

هل ذالك بسبب انني اقوم بتشغيل البرنامج على هاتف خارجي عبر تطبيق expo   

اي انه لو تم تثبيته ك apk في الهاتف هل سوف تحل المشكله   ام انه لا علاقه بذالك

 

سؤالك غير واضح , سأحاول إعطائك بعض الحالات التي قد تحدث معك:

  • إذا كنت تقصد أنك عند إضافة معلومات جديدة لاتبقى القديمة في المصفوفة , فالجواب هنا: صحيح لأنك عند إضافة معلومات جديدة فأنت فعليا تقوم باسبتدال المعلومات السابقة 
  • أما إذا كنت تقصد أنه يقوم بمسح البيانات القديمة بوحده فربما لتشغيله عن طريق expo 
  • أما إن كنت تقصد غير شيء فأخبرني 
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 8 دقائق مضت قال Nagmar ناجمار:

سؤالك غير واضح , سأحاول إعطائك بعض الحالات التي قد تحدث معك:

  • إذا كنت تقصد أنك عند إضافة معلومات جديدة لاتبقى القديمة في المصفوفة , فالجواب هنا: صحيح لأنك عند إضافة معلومات جديدة فأنت فعليا تقوم باسبتدال المعلومات السابقة 
  • أما إذا كنت تقصد أنه يقوم بمسح البيانات القديمة بوحده فربما لتشغيله عن طريق expo 
  • أما إن كنت تقصد غير شيء فأخبرني 

تقريبا الاختبار الاول ...

كيف اعلاج هاذا المشكله 

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

  • 0
بتاريخ الآن قال ahmedkawbal:

تقريبا الاختبار الاول ...

كيف اعلاج هاذا المشكله 

بالنسبة للمشكلة الأولى فأنت تقوم بإضافة المصفوفة , مثلا عن طريق :

  await AsyncStorage.setItem('note',da) 

هنا في كل مرة ستقوم بإضافة مصفوفة سيقوم باستبدال القديمة ووضع الجديدة

الحل:

سوف تقوم بصنع مصفوفة تحوي على Objects , وفي كل مرة تضيف Object تقوم بتعديل المصفوفة على أنها المصفوفة القديمة نفسها + العناصر الجديدة

أي يجب عليك التفكير بمنطقية 

مثال آخر :

تصنع مصفوفة , وتجعل عند الإدخال تذهب البيانات الى مصفوفة جديدة وهذه المصفوفة الجديدة تقوم بإدخالها في المصفوفة القديمة وتخزين المصفوفة القديمة

بهذا الشكل لن تفقد البيانات القديمة

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

  • 0
بتاريخ 8 دقائق مضت قال Nagmar ناجمار:

بالنسبة للمشكلة الأولى فأنت تقوم بإضافة المصفوفة , مثلا عن طريق :


  await AsyncStorage.setItem('note',da) 

هنا في كل مرة ستقوم بإضافة مصفوفة سيقوم باستبدال القديمة ووضع الجديدة

الحل:

سوف تقوم بصنع مصفوفة تحوي على Objects , وفي كل مرة تضيف Object تقوم بتعديل المصفوفة على أنها المصفوفة القديمة نفسها + العناصر الجديدة

أي يجب عليك التفكير بمنطقية 

مثال آخر :

تصنع مصفوفة , وتجعل عند الإدخال تذهب البيانات الى مصفوفة جديدة وهذه المصفوفة الجديدة تقوم بإدخالها في المصفوفة القديمة وتخزين المصفوفة القديمة

بهذا الشكل لن تفقد البيانات القديمة

نعم  لقد فهمت لك 

 لاكن اذا تفظلت  اذا يوجد مثال لذالك لكي  اعرف اكثر   

 وشكرا جزيلا لك 

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

  • 0
بتاريخ 4 دقائق مضت قال ahmedkawbal:

نعم  لقد فهمت لك 

 لاكن اذا تفظلت  اذا يوجد مثال لذالك لكي  اعرف اكثر   

 وشكرا جزيلا لك 

حاول أن تفكر بالحل لأن اعطائك الحل بشكل مباشر لن يفيدك بأي شيء 

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

  • 0
بتاريخ 18 دقائق مضت قال Nagmar ناجمار:

حاول أن تفكر بالحل لأن اعطائك الحل بشكل مباشر لن يفيدك بأي شيء 

هل قصد هاكذا 

                  const allDa = [...notes , body]

await AsyncStorage.setItem('note',allDa)

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

  • 0
بتاريخ 2 دقائق مضت قال ahmedkawbal:

هل قصد هاكذا 

                  const allDa = [...notes , body]

await AsyncStorage.setItem('note',allDa)

نعم , هكذا ستعيد كافة الملاحظات القديمة وأيضا الملاحظة الجديدة دون حذف أي شيء

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

  • 0
بتاريخ 44 دقائق مضت قال Nagmar ناجمار:

نعم , هكذا ستعيد كافة الملاحظات القديمة وأيضا الملاحظة الجديدة دون حذف أي شيء

لقد عملت  هاذا في شاشات الادخال  وقمت بالتجربه ولاكن  لا يوجد اي تغيير  مزال يتم استبدال القديم بالجديد  

 

وقمت بتجربه  عمل  هاذا في شاشه العرض الاستيراد  ولاكن نفس المشكله  

const value = await AsyncStorage.getItem("note");

    const parsed = JSON.parse(value)

    const allDa =[...parsed]

    setFormData(allDa)

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

  • 0
بتاريخ 1 دقيقة مضت قال ahmedkawbal:

لقد عملت  هاذا في شاشات الادخال  وقمت بالتجربه ولاكن  لا يوجد اي تغيير  مزال يتم استبدال القديم بالجديد  

 

وقمت بتجربه  عمل  هاذا في شاشه العرض الاستيراد  ولاكن نفس المشكله  

const value = await AsyncStorage.getItem("note");

    const parsed = JSON.parse(value)

    const allDa =[...parsed]

    setFormData(allDa)

هل يمكنك مشاركة الكود كاملا ؟

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

  • 0
بتاريخ 4 دقائق مضت قال Nagmar ناجمار:

هل يمكنك مشاركة الكود كاملا ؟

حسنا هاذول  واحد من شاشات الادخال  وشاشه العرض

 

InsertInputMo.js

Selected.js

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

  • 0
بتاريخ 5 دقائق مضت قال ahmedkawbal:

حسنا هاذول  واحد من شاشات الادخال  وشاشه العرض

 

InsertInputMo.js

Selected.js

في هذا الكود :

 //حفظ الملاحظة
   const saveNoteHandler = async () => {
    
    const type = "ايداع";
       const body ={
            id : new Date(),
            amount : amount,
            notice : notice,
            data : data,
            type : type
       }
       const allDa = [...notes , body]

                try{
                    const da = JSON.stringify(allDa)
                     await AsyncStorage.setItem('note',da)
                    setNotes(allDa)
                  //  
                   //getData();
                   //console.log(allDa);
                    setAmount('')
                    setNotice('')
                    setData('') 

                }catch(e){
                    console.log(e);
                }
                
}

لاأريد أن أعطيك الحل بشكل مباشر , أريدك أن تفكر في الحل

أن تقوم بحفظ ملاحظة جديدة الى الملاحظات الجديدة , لايوجد في مشكلة في ذلك

ولكن المشكلة مصفوفة الملاحظات فارغة 

انظر :

 const [notes, setNotes] = useState([]);

يجب عليك إضافة الملاحظات الى المصفوفة القديمة 

أنت في هذه الحالة تقوم بإضافة الملاحظات الى المصفوفة الجديدة واستبدالها بالمصفوفة القديمة 

ماهو الحل ؟

الحل بشكل بسيط , يجب عليك أستيراد المصفوفة كما تستوردها في شاشة العرض ثم تضعها في notes 

اي تستورد المصفوفة القديمة في كل مرة وتضعها داخل notes 

وفي هذه الحالة ستقوم بإضافة الملاحظات الجديدة بجانب القديمة

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

  • 0
بتاريخ 39 دقائق مضت قال Nagmar ناجمار:

في هذا الكود :


 //حفظ الملاحظة
   const saveNoteHandler = async () => {
    
    const type = "ايداع";
       const body ={
            id : new Date(),
            amount : amount,
            notice : notice,
            data : data,
            type : type
       }
       const allDa = [...notes , body]

                try{
                    const da = JSON.stringify(allDa)
                     await AsyncStorage.setItem('note',da)
                    setNotes(allDa)
                  //  
                   //getData();
                   //console.log(allDa);
                    setAmount('')
                    setNotice('')
                    setData('') 

                }catch(e){
                    console.log(e);
                }
                
}

لاأريد أن أعطيك الحل بشكل مباشر , أريدك أن تفكر في الحل

أن تقوم بحفظ ملاحظة جديدة الى الملاحظات الجديدة , لايوجد في مشكلة في ذلك

ولكن المشكلة مصفوفة الملاحظات فارغة 

انظر :


 const [notes, setNotes] = useState([]);

يجب عليك إضافة الملاحظات الى المصفوفة القديمة 

أنت في هذه الحالة تقوم بإضافة الملاحظات الى المصفوفة الجديدة واستبدالها بالمصفوفة القديمة 

ماهو الحل ؟

الحل بشكل بسيط , يجب عليك أستيراد المصفوفة كما تستوردها في شاشة العرض ثم تضعها في notes 

اي تستورد المصفوفة القديمة في كل مرة وتضعها داخل notes 

وفي هذه الحالة ستقوم بإضافة الملاحظات الجديدة بجانب القديمة

لم افهم قصدك في  

نستورد المصفوفه القديمه في كل مره وتضعها داخل notes

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

  • 0

أقصد أنك يجب عليك استيراد المصفوفة المخزنة ووضعها داخل ال notes 

في ملف العرض تقوم باستيراد المصفوفة القديمة , انظر:

useEffect(() =>{
        getData(),getDataDraw()
    },[])

const getData = async () => {


  try {
    const value = await AsyncStorage.getItem("note");
    const parsed = JSON.parse(value) 
    const allDa =[...parsed]
    setFormData(allDa)

  } catch(e) {
     console.log(e);
  }
}

هنا أنت بعدما قمت باستيراد المصفوفة القديمة قمت بوضعها داخل formData :

const [formData, setFormData] =useState([]);

ثم قمت بعمل map عليها

لذلك يجب عليك فعل نفس الشيء ولكن بملف الشاشة الثانية التي ارفقتها لي 

تقوم بنفس العملية والتي هي :

تقوم باستيراد المصفوفة كما فعلت بالأعلى ثم تضعها داخل ال notes بدلا من formData ولكن لاتقوم بعمل map لأنك لاتحتاج اليها هنا

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

  • 0
بتاريخ 20 ساعات قال Nagmar ناجمار:

أقصد أنك يجب عليك استيراد المصفوفة المخزنة ووضعها داخل ال notes 

في ملف العرض تقوم باستيراد المصفوفة القديمة , انظر:


useEffect(() =>{
        getData(),getDataDraw()
    },[])

const getData = async () => {


  try {
    const value = await AsyncStorage.getItem("note");
    const parsed = JSON.parse(value) 
    const allDa =[...parsed]
    setFormData(allDa)

  } catch(e) {
     console.log(e);
  }
}

هنا أنت بعدما قمت باستيراد المصفوفة القديمة قمت بوضعها داخل formData :


const [formData, setFormData] =useState([]);

ثم قمت بعمل map عليها

لذلك يجب عليك فعل نفس الشيء ولكن بملف الشاشة الثانية التي ارفقتها لي 

تقوم بنفس العملية والتي هي :

تقوم باستيراد المصفوفة كما فعلت بالأعلى ثم تضعها داخل ال notes بدلا من formData ولكن لاتقوم بعمل map لأنك لاتحتاج اليها هنا

السلام عليك  لقد كمت بتجربه هاذا ولاكنه يتم اضافه مكون يتم ظهور المكون الجديد مع المكونات السابقه  

ولاكن المشكله في عدم ظهور البيانات في المكون   

const body ={

            id : new Date(),

            amount : amount,

            notice : notice,

            data : data,

            type : type

       }

       const all = [...notes , body]

                try{

                   

                    const value = await AsyncStorage.getItem("note")

                    const n = JSON.parse(value)

 

                    const allDa = [all ,...n]

                    const da = JSON.stringify(allDa)

                     const values = await AsyncStorage.setItem('note',da,(() => props.navigation.navigate("Selected")))

                    setNotes(allDa)

 

 

وللمعرفه لقد قمت بازاله 

    const allDa =[...parsed]
من شاشه العرض ....

فما هو الخطا  وما المطلوب لذالك

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

  • 0
بتاريخ 3 ساعات قال ahmedkawbal:

السلام عليك  لقد كمت بتجربه هاذا ولاكنه يتم اضافه مكون يتم ظهور المكون الجديد مع المكونات السابقه  

ولاكن المشكله في عدم ظهور البيانات في المكون   

const body ={

            id : new Date(),

            amount : amount,

            notice : notice,

            data : data,

            type : type

       }

       const all = [...notes , body]

                try{

                   

                    const value = await AsyncStorage.getItem("note")

                    const n = JSON.parse(value)

 

                    const allDa = [all ,...n]

                    const da = JSON.stringify(allDa)

                     const values = await AsyncStorage.setItem('note',da,(() => props.navigation.navigate("Selected")))

                    setNotes(allDa)

 

 

وللمعرفه لقد قمت بازاله 

    const allDa =[...parsed]
من شاشه العرض ....

فما هو الخطا  وما المطلوب لذالك

لماذا قمت بإزالة 

const allDa =[...parsed]

هذا الكود هو الذي يرجع لك كل المكونات 

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

  • 0
بتاريخ 1 دقيقة مضت قال Nagmar ناجمار:

لماذا قمت بإزالة 


const allDa =[...parsed]

هذا الكود هو الذي يرجع لك كل المكونات 

لقد ارجعته ولم تحل المشكله

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

  • 0
بتاريخ 36 دقائق مضت قال Nagmar ناجمار:

هل تستطيع إرفاق كامل الملفات لأستطيع تشغيل البرنامج عندي ؟

شكرا لك لقد قمت بحل المشكله وتم عرض البيانات كامله ..   عدلت في 

                    const allDa = [...all ,...n]  و كذالك  setNotes([])  فقط تم ذالك ....

ولاكن المشكله الاخرى وهي اريد عكس ترتيب العرض للصفحه كامله   لانه كما رايت في شاشه العرض انه يوجد متعييرين لعض البيانات formData , formDataDra  و reveres()  ترتب الكائن الخاص بها فقط وليس الشاشه كامله

بتاريخ 10 دقائق مضت قال ahmedkawbal:

شكرا لك لقد قمت بحل المشكله وتم عرض البيانات كامله ..   عدلت في 

                    const allDa = [...all ,...n]  و كذالك  setNotes([])  فقط تم ذالك ....

ولاكن المشكله الاخرى وهي اريد عكس ترتيب العرض للصفحه كامله   لانه كما رايت في شاشه العرض انه يوجد متعييرين لعض البيانات formData , formDataDra  و reveres()  ترتب الكائن الخاص بها فقط وليس الشاشه كامله

خلاص شكرا لقد تم حل جميع المشكل...........................

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...