الفرق بين المراجعتين لصفحة: «ReactNative/asyncstorage»

من موسوعة حسوب
رفع المحتوى
 
 
(5 مراجعات متوسطة بواسطة 3 مستخدمين غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:AsyncStorage  في ReactNative}}</noinclude>
<noinclude>{{DISPLAYTITLE:الواجهة AsyncStorage  في React Native}}</noinclude><blockquote>'''مهملة:''' استخدم إحدى [https://reactnative.directory/?search=storage الحزم التي يوفرها المجتمع] بدلًا عنها.</blockquote><code>AsyncStorage</code> هو نظام تخزين مستمر غير مشفّر وغير متزامن، يُخزن البيانات في صورة أزواج <code>(key: value)</code>، وهو نظام موحّد لكلّ أجزاء التطبيق، ويجب استعماله بدلًا عن <code>LocalStorage</code>.
** مهمل**، استخدم [https://github.com/react-native-async-storage/async-storage <code>async-storage</code>] بدلًا عنه.


<code>AsyncStorage</code> هو نظام تخزين مستمر غير مشفر وغير متزامن، يُخزن البيانات في شكل أزواج <code>(key: value)</code>، وهو نظام موحد لكل أجزاء التطبيق. يجب استعماله بدلًا عن <code>LocalStorage</code>.
يُفضّل استخدام التجريد (abstraction) على مستوى أعلى من <code>AsyncStorage</code> بدلًا من استخدامه على <code>AsyncStorage</code> مباشرةً في حالة التخزين الثقيل للبيانات.


يُفضّل استخدام التجريد (abstraction) على مستوى أعلى من <code>AsyncStorage</code> بدلًا من استخدامه على <code>AsyncStorage</code> مباشرة في حالة التخزين الثقيل للبيانات.
يدعم نظام iOS نظام التخزين <code>AsyncStorage</code> بواسطة شيفرة أصلية تُخزِّن القيم الصغيرة في قاموس متسلسل، والقيم الكبيرة في ملفّات منفصلة؛ أمّا نظام أندويد فسيتخدم إمّا <code>RocksDB</code> أو <code>SQLite</code> بناءً على ما هو متاح.


يدعم نظام iOS نظام التخزين <code>AsyncStorage</code> بواسطة شيفرة أصلية تُخزِّن القيم الصغيرة في قاموس متسلسل، والقيم الكبيرة في ملفات منفصلة. أمّا نظام أندويد فإنّه سيتخدم إمّا <code>RocksDB</code> أو <code>SQLite</code> بناءً على ما هو متاح.
شيفرة [[JavaScript|جافاسكربت]] الخاصة بنظام التخزين <code>AsyncStorage</code> توفِّر واجهة برمجة تطبيقات (API) واضحة، وكائنات خطأ (Error Objects)، ودوال غير متعددة. كلّ دالة في واجهة برمجة التطبيقات (API) تُرجع وعدًا (Promise).


شيفرة جافاسكريبت الخاصة بنظام التخزين <code>AsyncStorage</code> توفِّر واجهة برمجة تطبيقات (API) واضحة، وكائنات خطأ (Error Objects)، ودوال غير متعددة. كل دالة في واجهة برمجة التطبيقات (API) تُرجع وعدًا (Promise).
== مثال ==
مثال لاستيراد مكتبة <code>AsyncStorage</code>:


'''استيراد مكتبة <code>AsyncStorage</code>'''
<syntaxhighlight class="react" lang="javascript">import { AsyncStorage} from 'react-native';</syntaxhighlight>
حفظ البيانات:


<syntaxhighlight class="react">import { AsyncStorage} from 'react-native';</syntaxhighlight>
<syntaxhighlight class="react" lang="javascript">_storeData = async () => {
'''حفظ البيانات'''
 
<syntaxhighlight class="react">_storeData = async () => {
   try {
   try {
     await AsyncStorage.setItem(
     await AsyncStorage.setItem(
سطر 25: سطر 23:
   }
   }
};</syntaxhighlight>
};</syntaxhighlight>
'''قراءة البيانات'''
قراءة البيانات:


<syntaxhighlight class="react">_retrieveData = async () => {
<syntaxhighlight class="react" lang="javascript">_retrieveData = async () => {
   try {
   try {
     const value = await AsyncStorage.getItem('TASKS');
     const value = await AsyncStorage.getItem('TASKS');
سطر 40: سطر 38:


__toc__
__toc__
== مرجع الدوال ==
== التوابع ==


=== <code>‎getItem()‎</code> ===
=== <code>‎getItem()‎</code> ===


<syntaxhighlight class="react">static getItem(key: string, [callback]: ?(error: ?Error, result: ?string) => void)</syntaxhighlight>
<syntaxhighlight class="react" lang="javascript">static getItem(key: string, [callback]: ?(error: ?Error, result: ?string) => void)</syntaxhighlight>
تجلب البيانات الخاصة بمفتاح (key) معين وتستدعي رد نداء (callback) بعد إكتمال العملية أو حدوث خطأ أثناء التنفيذ.تُرجع كائن من النوع [https://www.google.com/url?q=https://wiki.hsoub.com/JavaScript/Promise&sa=D&ust=1611306791480000&usg=AOvVaw2elF2z1fPTgS6EQa20AEJ2 <code>promise</code>].
تجلب البيانات الخاصة بمفتاح (<code>key</code>) معيّن وتستدعي ردّ نداء (callback). بعد إكتمال العملية أو حدوث خطأ أثناء التنفيذ تُرجع كائن من النوع [https://www.google.com/url?q=https://wiki.hsoub.com/JavaScript/Promise&sa=D&ust=1611306791480000&usg=AOvVaw2elF2z1fPTgS6EQa20AEJ2 <code>promise</code>].


'''المعاملات'''
'''المعاملات'''
سطر 55: سطر 53:
! الوصف
! الوصف
|-
|-
| key
| <code>key</code>
| سلسلة نصية (string)
| سلسلة نصية (string)
| نعم
| نعم
| المفتاح الخاص بالبيانات المُراد جلبها.
| المفتاح الخاص بالبيانات المُراد جلبها.
|-
|-
| callback
| <code>callback</code>
| ?(error: ?Error, result: ?string) => void
| ?(error: ?Error, result: ?string) => void
| لا
| لا
| دالة تُستدعى عند إكتمال عملية جلب البيانات أو حدوث خطأ أثناء العملية.
| دالة تُستدعى عند إكتمال عملية جلب البيانات أو حدوث خطأ أثناء العملية.
|}
|}
=== <code>‎setItem()‎</code> ===
=== <code>‎setItem()‎</code> ===


<syntaxhighlight class="react">static setItem(key: string, value: string, [callback]: ?(error: ?Error) => void)</syntaxhighlight>
<syntaxhighlight class="react" lang="javascript">static setItem(key: string, value: string, [callback]: ?(error: ?Error) => void)</syntaxhighlight>
تُخزِّن البيانات في شكل زوج (key: value)، وتستدعي دالة بعد إكتمال العملية أو حدوث خطأ أثناء التنفيذ. تُرجع كائن من النوع [https://www.google.com/url?q=https://wiki.hsoub.com/JavaScript/Promise&sa=D&ust=1611306791480000&usg=AOvVaw2elF2z1fPTgS6EQa20AEJ2 <code>promise</code>].
تُخزِّن البيانات في صورة زوج (<code>key: value</code>)، وتستدعي دالة بعد إكتمال العملية أو حدوث خطأ أثناء التنفيذ. تُرجع كائن من النوع <code>[[JavaScript/Promise|Promise]]</code>.


'''المعاملات'''
'''المعاملات:'''


{| class="wikitable"
{| class="wikitable"
سطر 80: سطر 76:
! الوصف
! الوصف
|-
|-
| key
| <code>key</code>
| سلسلة نصية (string)
| سلسلة نصية (string)
| نعم
| نعم
| المفتاح الخاص بالعنصر المُراد تخزينه.
| المفتاح الخاص بالعنصر المُراد تخزينه.
|-
|-
| value
| <code>value</code>
| سلسلة نصية (string)
| سلسلة نصية (string)
| نعم
| نعم
| العنصر المراد تخزينه.
| العنصر المراد تخزينه.
|-
|-
| callback
| <code>callback</code>
| ?(error: ?Error) => void
| ?(error: ?Error) => void
| لا
| لا
| دالة تُستدعى عند حدوث خطأ اثناء العملية.
| دالة تُستدعى عند حدوث خطأ اثناء العملية.
سطر 98: سطر 94:
=== <code>‎removeItem()‎</code> ===
=== <code>‎removeItem()‎</code> ===


<syntaxhighlight class="react">static removeItem(key: string, [callback]: ?(error: ?Error) => void)</syntaxhighlight>
<syntaxhighlight class="react" lang="javascript">static removeItem(key: string, [callback]: ?(error: ?Error) => void)</syntaxhighlight>
تحذف العنصر المرتبط بالمفتاح المعين، وتستدعي دالة بعد إكتمال العملية أو حدوث خطأ أثناء التنفيذ. تُرجع كائن من النوع [https://www.google.com/url?q=https://wiki.hsoub.com/JavaScript/Promise&sa=D&ust=1611306791480000&usg=AOvVaw2elF2z1fPTgS6EQa20AEJ2 <code>promise</code>].
تحذف العنصر المرتبط بالمفتاح المعين، وتستدعي دالة بعد إكتمال العملية أو حدوث خطأ أثناء التنفيذ. تُرجع كائن من النوع <code>[[JavaScript/Promise|Promise]]</code>.
 
'''المعاملات:'''


{| class="wikitable"
{| class="wikitable"
سطر 107: سطر 105:
! الوصف
! الوصف
|-
|-
| key
|<code>key</code>
| سلسلة نصية (string)
| سلسلة نصية (string)
| نعم
| نعم
| المفتاح الخاص بالعنصر المُراد حذفه.
| المفتاح الخاص بالعنصر المُراد حذفه.
|-
|-
| callback
|<code>callback</code>
| ?(error: ?Error) => void
| ?(error: ?Error) => void
| لا
| لا
| دالة تُستدعى عند حدوث خطأ اثناء العملية.
| دالة تُستدعى عند حدوث خطأ اثناء العملية.
|}
|}


=== <code>mergeItem</code> ===
===<code>mergeItem()‎</code>===


<syntaxhighlight class="react">static mergeItem(key: string, value: string, [callback]: ?(error: ?Error) => void)</syntaxhighlight>
<syntaxhighlight class="react" lang="javascript">static mergeItem(key: string, value: string, [callback]: ?(error: ?Error) => void)</syntaxhighlight>
تُحدِّث القيمة المرتبطة معين. ويجب أن يكون المفتاح والقيمة الجديدة في شكل سلسلة JSON. تُرجع كائن من النوع [https://www.google.com/url?q=https://wiki.hsoub.com/JavaScript/Promise&sa=D&ust=1611306791480000&usg=AOvVaw2elF2z1fPTgS6EQa20AEJ2 <code>promise</code>].
تُحدِّث القيمة المرتبطة معيّن. ويجب أن يكون المفتاح والقيمة الجديدة في شكل سلسلة JSON. تُرجع كائن من النوع <code>[[JavaScript/Promise|Promise]]</code>.


'''المعاملات'''
'''ملاحظة''': بعض عمليات التنفيذ للمنصات الأصيلة (Native implementations) لا تدعم هذه الدالة.
 
'''المعاملات:'''


{| class="wikitable"
{| class="wikitable"
سطر 131: سطر 131:
! الوصف
! الوصف
|-
|-
| key
|<code>key</code>
| سلسلة نصية (string)
| سلسلة نصية (string)
| نعم
| نعم
| المفتاح المُراد تحديث قيمته.
| المفتاح المُراد تحديث قيمته.
|-
|-
| value
|<code>value</code>
| سلسلة نصية (string)
| سلسلة نصية (string)
| نعم
| نعم
| القيمة الجديدة للمفتاح.
| القيمة الجديدة للمفتاح.
|-
|-
| callback
|<code>callback</code>
| ?(error: ?Error) => void
| ?(error: ?Error) => void
| لا
| لا
| دالة تُستدعى عند حدوث خطأ اثناء العملية.
| دالة تُستدعى عند حدوث خطأ اثناء العملية.
|}
|}


'''مثال'''
'''مثال:'''


<syntaxhighlight class="react">let UID123_object = {
<syntaxhighlight class="react" lang="javascript">let UID123_object = {
   name: 'Chris',
   name: 'Chris',
   age: 30,
   age: 30,
سطر 179: سطر 179:
// => {'name':'Chris','age':31,'traits':
// => {'name':'Chris','age':31,'traits':
//    {'shoe_size':10,'hair':'brown','eyes':'blue'}}</syntaxhighlight>
//    {'shoe_size':10,'hair':'brown','eyes':'blue'}}</syntaxhighlight>
=== <code>‎clear()‎</code> ===
=== <code>‎clear()‎</code> ===


<syntaxhighlight class="react">static clear([callback]: ?(error: ?Error) => void)</syntaxhighlight>
<syntaxhighlight class="react" lang="javascript">static clear([callback]: ?(error: ?Error) => void)</syntaxhighlight>
تحذف جميع البيانات المُخزنة في <code>AsyncStorage</code>، حتى تلك المرتبطة بتطبيقات أخرى. لذلك لا يُنصح باستخدامها ويجب استخدام <code>removeItem</code> أو <code>multiRemove</code> لمسح المفاتيح المرتبطة بتطبيقك فقط. تُرجع كائن من النوع [https://www.google.com/url?q=https://wiki.hsoub.com/JavaScript/Promise&sa=D&ust=1611306791480000&usg=AOvVaw2elF2z1fPTgS6EQa20AEJ2 <code>promise</code>].
تحذف جميع البيانات المُخزنة في <code>AsyncStorage</code>، حتى تلك المرتبطة بتطبيقات أخرى. لذلك لا يُنصح باستخدامها ويجب استخدام <code>removeItem</code> أو <code>multiRemove</code> لمسح المفاتيح المرتبطة بتطبيقك فقط. تُرجع كائن من النوع <code>[[JavaScript/Promise|Promise]]</code>.


'''المعاملات'''
'''المعاملات:'''


{| class="wikitable"
{| class="wikitable"
سطر 194: سطر 192:
! الوصف
! الوصف
|-
|-
| callback
| <code>callback</code>
| ?(error: ?Error) => void
| <code>‪?(error: ?Error) => void</code>
| لا
| لا
| دالة تُستدعى عند حدوث خطأ اثناء العملية.
| دالة تُستدعى عند حدوث خطأ اثناء العملية.
|}
|}
=== <code>‎getAllKeys()‎</code> ===
=== <code>‎getAllKeys()‎</code> ===


<syntaxhighlight class="react">static getAllKeys([callback]: ?(error: ?Error, keys: ?Array<string>) => void)</syntaxhighlight>
<syntaxhighlight class="react" lang="javascript">static getAllKeys([callback]: ?(error: ?Error, keys: ?Array<string>) => void)</syntaxhighlight>
تتحصل على جميع المفاتيح المرتبطة بالتطبيق. تُرجع كائن من النوع [https://www.google.com/url?q=https://wiki.hsoub.com/JavaScript/Promise&sa=D&ust=1611306791480000&usg=AOvVaw2elF2z1fPTgS6EQa20AEJ2 <code>promise</code>].
تتحصل على جميع المفاتيح المرتبطة بالتطبيق. تُرجع كائن من النوع <code>[[JavaScript/Promise|Promise]]</code>.


'''المعاملات'''
'''المعاملات'''
سطر 214: سطر 210:
! الوصف
! الوصف
|-
|-
| callback
| <code>callback</code>
| ?(error: ?Error) => void
| <code>‪?(error: ?Error) => void</code>
| لا
| لا
| دالة تُستدعى عند إكتمال العملية والحصول على المفاتيح أو عند حدوث خطأ.
| دالة تُستدعى عند إكتمال العملية والحصول على المفاتيح أو عند حدوث خطأ.
سطر 222: سطر 218:
=== <code>‎flushGetRequests()‎</code> ===
=== <code>‎flushGetRequests()‎</code> ===


<syntaxhighlight class="react">static flushGetRequests(): [object Object]</syntaxhighlight>
<syntaxhighlight class="react" lang="javascript">static flushGetRequests(): [object Object]</syntaxhighlight>
تحذف جميع الطلبات المُعلّقة عن طريق الحصول على البيانات كدفعة واحدة.
تحذف جميع الطلبات المُعلّقة عن طريق الحصول على البيانات كدفعة واحدة.


=== <code>‎multiGet()‎</code> ===
=== <code>‎multiGet()‎</code> ===


<syntaxhighlight class="react">static multiGet(keys: Array<string>, [callback]: ?(errors: ?Array<Error>, result: ?Array<Array <string>>) => void)</syntaxhighlight>
<syntaxhighlight class="react" lang="javascript">static multiGet(keys: Array<string>, [callback]: ?(errors: ?Array<Error>, result: ?Array<Array <string>>) => void)</syntaxhighlight>
تسمح بالحصول على العناصر دفعة واحدة عن طريق إرسال مجموعة من المفاتيح للدالة والحصول على البيانات المرتبطة بهذه المفاتيح في شكل أزواج (key: value). تُرجع كائن من النوع [https://www.google.com/url?q=https://wiki.hsoub.com/JavaScript/Promise&sa=D&ust=1611306791480000&usg=AOvVaw2elF2z1fPTgS6EQa20AEJ2 <code>promise</code>].
تسمح بالحصول على العناصر دفعة واحدة عن طريق إرسال مجموعة من المفاتيح للدالة والحصول على البيانات المرتبطة بهذه المفاتيح في شكل أزواج (key: value). تُرجع كائن من النوع <code>[[JavaScript/Promise|Promise]]</code>.


<syntaxhighlight class="react">multiGet(['k1', 'k2'], cb) -> cb([['k1', 'val1'], ['k2', 'val2']])</syntaxhighlight>
<syntaxhighlight class="react" lang="javascript">multiGet(['k1', 'k2'], cb) -> cb([['k1', 'val1'], ['k2', 'val2']])</syntaxhighlight>
'''المعاملات'''
'''المعاملات'''


سطر 239: سطر 235:
! الوصف
! الوصف
|-
|-
| keys
| <code>keys</code>
| Array<string>
| ‪Array<string>
| نعم
| نعم
| مصفوفة من المفاتيح المراد جلب العناصر المرتبطة بها.
| مصفوفة من المفاتيح المراد جلب العناصر المرتبطة بها.
|-
|-
| callback
| <code>callback</code>
| ?(errors: ?Array<Error>, result: ?Array<Array <string>>) => void
| ?(errors: ?Array<Error>
result: ?Array<Array <string>>) => void
| لا
| لا
| دالة تُستدعى عند إكتمال العملية والحصول على البيانات أو عند حدوث خطأ.
| دالة تُستدعى عند إكتمال العملية والحصول على البيانات أو عند حدوث خطأ.
سطر 252: سطر 249:
'''مثال'''
'''مثال'''


<syntaxhighlight class="react">AsyncStorage.getAllKeys((err, keys) => {
<syntaxhighlight class="react" lang="javascript">AsyncStorage.getAllKeys((err, keys) => {
   AsyncStorage.multiGet(keys, (err, stores) => {
   AsyncStorage.multiGet(keys, (err, stores) => {
     stores.map((result, i, store) => {
     stores.map((result, i, store) => {
سطر 261: سطر 258:
   });
   });
});</syntaxhighlight>
});</syntaxhighlight>
=== <code>‎multiSet()‎</code> ===
=== <code>‎multiSet()‎</code> ===


<syntaxhighlight class="react">static multiSet(keyValuePairs: Array<Array <string>>, [callback]: ?(errors: ?Array<Error>) => void)</syntaxhighlight>
<syntaxhighlight class="react" lang="javascript">static multiSet(keyValuePairs: Array<Array <string>>, [callback]: ?(errors: ?Array<Error>) => void)</syntaxhighlight>
تُحزِّن عددًا من الازواج (key: value) دفعة واحدة. عند اكتمال العملية تحصل على رد نداء واحد يحتوي على جميع الأخطاء في حال حدوثها. تُرجع كائن من النوع [https://www.google.com/url?q=https://wiki.hsoub.com/JavaScript/Promise&sa=D&ust=1611306791480000&usg=AOvVaw2elF2z1fPTgS6EQa20AEJ2 <code>promise</code>].
تُحزِّن عددًا من الازواج (<code>key: value</code>) دفعةً واحدة. عند اكتمال العملية تحصل على ردّ نداء واحد يحتوي على جميع الأخطاء في حال حدوثها. تُرجع كائن من النوع <code>[[JavaScript/Promise|Promise]]</code>.


<syntaxhighlight class="react">multiSet([['k1', 'val1'], ['k2', 'val2']], cb);</syntaxhighlight>
<syntaxhighlight class="react" lang="javascript">multiSet([['k1', 'val1'], ['k2', 'val2']], cb);</syntaxhighlight>'''المعاملات:'''
{| class="wikitable"
{| class="wikitable"
! الاسم
! الاسم
سطر 275: سطر 270:
! الوصف
! الوصف
|-
|-
| keyValuePairs
|<code>keyValuePairs</code>
| Array<Array <string>>
| ‪Array<Array <string>>
| نعم
| نعم
| مصفومة من الازواج (key: value).
| مصفومة من الازواج (<code>key: value</code>).
|-
|-
| callback
|<code>callback</code>
| ?(errors: ?Array<Error>, result: ?Array<Array <string>>) => void
| ?(errors: ?Array<Error>,
result: ?Array<Array <string>>) => void
| لا
| لا
| دالة تُستدعى عند إكتمال العملة أو عند حدوث خطأ.
| دالة تُستدعى عند اكتمال العملة أو عند حدوث خطأ.
|}
|}


=== <code>‎multiRemove()‎</code> ===
=== <code>‎multiRemove()‎</code> ===


<syntaxhighlight class="react">static multiRemove(keys: Array<string>, [callback]: ?(errors: ?Array<Error>) => void)</syntaxhighlight>
<syntaxhighlight class="react" lang="javascript">static multiRemove(keys: Array<string>, [callback]: ?(errors: ?Array<Error>) => void)</syntaxhighlight>
تحذف جميع البيانات المرتبطة بالمفاتيح المُعطاة للدالة. تُرجع كائن من النوع [https://www.google.com/url?q=https://wiki.hsoub.com/JavaScript/Promise&sa=D&ust=1611306791480000&usg=AOvVaw2elF2z1fPTgS6EQa20AEJ2 <code>promise</code>].
تحذف جميع البيانات المرتبطة بالمفاتيح المُعطاة للدالة. تُرجع كائن من النوع <code>[[JavaScript/Promise|Promise]]</code>.


'''المعاملات'''
'''المعاملات'''
سطر 299: سطر 295:
! الوصف
! الوصف
|-
|-
| keys
| <code>keys</code>
| Array<string>
| ‪Array<string>
| نعم
| نعم
| مصفوفة من المفاتيح المراد حذفها.
| مصفوفة من المفاتيح المراد حذفها.
|-
|-
| callback
| <code>callback</code>
| ?(errors: ?Array<Error>) => void
| ?(errors: ?Array<Error>) => void
| لا
| لا
| دالة تُستدعى عند إكتمال العملية أو عند حدوث خطأ.
| دالة تُستدعى عند إكتمال العملية أو عند حدوث خطأ.
سطر 312: سطر 308:
'''مثال'''
'''مثال'''


<syntaxhighlight class="react">let keys = ['k1', 'k2'];
<syntaxhighlight class="react" lang="javascript">let keys = ['k1', 'k2'];
AsyncStorage.multiRemove(keys, (err) => {
AsyncStorage.multiRemove(keys, (err) => {
   // keys k1 &amp; k2 removed, if they existed
   // keys k1 &amp; k2 removed, if they existed
   // do most stuff after removal (if you want)
   // do most stuff after removal (if you want)
});</syntaxhighlight>
});</syntaxhighlight>
=== <code>multiMerge</code> ===
=== <code>multiMerge</code> ===


<syntaxhighlight class="react">static multiMerge(keyValuePairs: Array<Array <string>>, [callback]: ?(errors: ?Array<Error>) => void)</syntaxhighlight>
<syntaxhighlight class="react" lang="javascript">static multiMerge(keyValuePairs: Array<Array <string>>, [callback]: ?(errors: ?Array<Error>) => void)</syntaxhighlight>
تُحدِّث قيم أكثر من مفتاح واحد دفعة واحدة. ويجب أن تكون جميع القيم والمفاتيح في شكل سلسلة JSON. تُرجع كائن من النوع [https://www.google.com/url?q=https://wiki.hsoub.com/JavaScript/Promise&sa=D&ust=1611306791480000&usg=AOvVaw2elF2z1fPTgS6EQa20AEJ2 <code>promise</code>].
تُحدِّث قيم أكثر من مفتاح واحد دفعة واحدة. ويجب أن تكون جميع القيم والمفاتيح في شكل سلسلة JSON. تُرجع كائن من النوع <code>[[JavaScript/Promise|Promise]]</code>.


'''ملاحظة''': بعض عمليات التنفيذ الأصلية (Native implementations) لا تدعم هذه الدالة.
'''ملاحظة''': بعض عمليات التنفيذ للمنصات الأصيلة (Native implementations) لا تدعم هذه الدالة.


'''المعاملات'''
'''المعاملات'''
سطر 334: سطر 328:
! الوصف
! الوصف
|-
|-
| keyValuePairs
| <code>keyValuePairs</code>
| Array<Array <string>>
| ‪Array<Array <string>>
| نعم
| نعم
| مصفومة من الأزواج (key: value).
| مصفومة من الأزواج (key: value).
|-
|-
| callback
| <code>callback</code>
| ?(errors: ?Array<Error>, result: ?Array<Array <string>>) => void
| ?(errors: ?Array<Error>,
result: ?Array<Array <string>>) => void
| لا
| لا
| دالة تُستدعى عند إكتمال العملة أو عند حدوث خطأ.
| دالة تُستدعى عند إكتمال العملة أو عند حدوث خطأ.
سطر 347: سطر 342:
'''مثال'''
'''مثال'''


<syntaxhighlight class="react">// first user, initial values
<syntaxhighlight class="react" lang="javascript">// first user, initial values
let UID234_object = {
let UID234_object = {
   name: 'Chris',
   name: 'Chris',
سطر 399: سطر 394:
== المصادر ==
== المصادر ==


[https://reactnative.dev/docs/asyncstorage صفحة AsyncStorage في توثيق React Native الرسمي].
* [https://reactnative.dev/docs/asyncstorage صفحة AsyncStorage في توثيق React Native الرسمي].
[[تصنيف: ReactNative]]
[[تصنيف: ReactNative]]

المراجعة الحالية بتاريخ 12:42، 9 أكتوبر 2021

مهملة: استخدم إحدى الحزم التي يوفرها المجتمع بدلًا عنها.

AsyncStorage هو نظام تخزين مستمر غير مشفّر وغير متزامن، يُخزن البيانات في صورة أزواج (key: value)، وهو نظام موحّد لكلّ أجزاء التطبيق، ويجب استعماله بدلًا عن LocalStorage.

يُفضّل استخدام التجريد (abstraction) على مستوى أعلى من AsyncStorage بدلًا من استخدامه على AsyncStorage مباشرةً في حالة التخزين الثقيل للبيانات.

يدعم نظام iOS نظام التخزين AsyncStorage بواسطة شيفرة أصلية تُخزِّن القيم الصغيرة في قاموس متسلسل، والقيم الكبيرة في ملفّات منفصلة؛ أمّا نظام أندويد فسيتخدم إمّا RocksDB أو SQLite بناءً على ما هو متاح.

شيفرة جافاسكربت الخاصة بنظام التخزين AsyncStorage توفِّر واجهة برمجة تطبيقات (API) واضحة، وكائنات خطأ (Error Objects)، ودوال غير متعددة. كلّ دالة في واجهة برمجة التطبيقات (API) تُرجع وعدًا (Promise).

مثال

مثال لاستيراد مكتبة AsyncStorage:

import { AsyncStorage} from 'react-native';

حفظ البيانات:

_storeData = async () => {
  try {
    await AsyncStorage.setItem(
      '@MySuperStore:key',
      'I like to save it.'
    );
  } catch (error) {
    // Error saving data
  }
};

قراءة البيانات:

_retrieveData = async () => {
  try {
    const value = await AsyncStorage.getItem('TASKS');
    if (value !== null) {
      // We have data!!
      console.log(value);
    }
  } catch (error) {
    // Error retrieving data
  }
};

التوابع

‎getItem()‎

static getItem(key: string, [callback]: ?(error: ?Error, result: ?string) => void)

تجلب البيانات الخاصة بمفتاح (key) معيّن وتستدعي ردّ نداء (callback). بعد إكتمال العملية أو حدوث خطأ أثناء التنفيذ تُرجع كائن من النوع promise.

المعاملات

الاسم النوع مطلوب الوصف
key سلسلة نصية (string) نعم المفتاح الخاص بالبيانات المُراد جلبها.
callback ‪?(error: ?Error, result: ?string) => void لا دالة تُستدعى عند إكتمال عملية جلب البيانات أو حدوث خطأ أثناء العملية.

‎setItem()‎

static setItem(key: string, value: string, [callback]: ?(error: ?Error) => void)

تُخزِّن البيانات في صورة زوج (key: value)، وتستدعي دالة بعد إكتمال العملية أو حدوث خطأ أثناء التنفيذ. تُرجع كائن من النوع Promise.

المعاملات:

الاسم النوع مطلوب الوصف
key سلسلة نصية (string) نعم المفتاح الخاص بالعنصر المُراد تخزينه.
value سلسلة نصية (string) نعم العنصر المراد تخزينه.
callback ‪?(error: ?Error) => void لا دالة تُستدعى عند حدوث خطأ اثناء العملية.

‎removeItem()‎

static removeItem(key: string, [callback]: ?(error: ?Error) => void)

تحذف العنصر المرتبط بالمفتاح المعين، وتستدعي دالة بعد إكتمال العملية أو حدوث خطأ أثناء التنفيذ. تُرجع كائن من النوع Promise.

المعاملات:

الاسم النوع مطلوب الوصف
key سلسلة نصية (string) نعم المفتاح الخاص بالعنصر المُراد حذفه.
callback ‪?(error: ?Error) => void لا دالة تُستدعى عند حدوث خطأ اثناء العملية.

mergeItem()‎

static mergeItem(key: string, value: string, [callback]: ?(error: ?Error) => void)

تُحدِّث القيمة المرتبطة معيّن. ويجب أن يكون المفتاح والقيمة الجديدة في شكل سلسلة JSON. تُرجع كائن من النوع Promise.

ملاحظة: بعض عمليات التنفيذ للمنصات الأصيلة (Native implementations) لا تدعم هذه الدالة.

المعاملات:

الاسم النوع مطلوب الوصف
key سلسلة نصية (string) نعم المفتاح المُراد تحديث قيمته.
value سلسلة نصية (string) نعم القيمة الجديدة للمفتاح.
callback ‪?(error: ?Error) => void لا دالة تُستدعى عند حدوث خطأ اثناء العملية.

مثال:

let UID123_object = {
  name: 'Chris',
  age: 30,
  traits: { hair: 'brown', eyes: 'brown' }
};
// You only need to define what will be added or updated
let UID123_delta = {
  age: 31,
  traits: { eyes: 'blue', shoe_size: 10 }
};

AsyncStorage.setItem(
  'UID123',
  JSON.stringify(UID123_object),
  () => {
    AsyncStorage.mergeItem(
      'UID123',
      JSON.stringify(UID123_delta),
      () => {
        AsyncStorage.getItem('UID123', (err, result) => {
          console.log(result);
        });
      }
    );
  }
);

// Console log result:
// => {'name':'Chris','age':31,'traits':
//    {'shoe_size':10,'hair':'brown','eyes':'blue'}}

‎clear()‎

static clear([callback]: ?(error: ?Error) => void)

تحذف جميع البيانات المُخزنة في AsyncStorage، حتى تلك المرتبطة بتطبيقات أخرى. لذلك لا يُنصح باستخدامها ويجب استخدام removeItem أو multiRemove لمسح المفاتيح المرتبطة بتطبيقك فقط. تُرجع كائن من النوع Promise.

المعاملات:

الاسم النوع مطلوب الوصف
callback ‪?(error: ?Error) => void لا دالة تُستدعى عند حدوث خطأ اثناء العملية.

‎getAllKeys()‎

static getAllKeys([callback]: ?(error: ?Error, keys: ?Array<string>) => void)

تتحصل على جميع المفاتيح المرتبطة بالتطبيق. تُرجع كائن من النوع Promise.

المعاملات

الاسم النوع مطلوب الوصف
callback ‪?(error: ?Error) => void لا دالة تُستدعى عند إكتمال العملية والحصول على المفاتيح أو عند حدوث خطأ.

‎flushGetRequests()‎

static flushGetRequests(): [object Object]

تحذف جميع الطلبات المُعلّقة عن طريق الحصول على البيانات كدفعة واحدة.

‎multiGet()‎

static multiGet(keys: Array<string>, [callback]: ?(errors: ?Array<Error>, result: ?Array<Array <string>>) => void)

تسمح بالحصول على العناصر دفعة واحدة عن طريق إرسال مجموعة من المفاتيح للدالة والحصول على البيانات المرتبطة بهذه المفاتيح في شكل أزواج (key: value). تُرجع كائن من النوع Promise.

multiGet(['k1', 'k2'], cb) -> cb([['k1', 'val1'], ['k2', 'val2']])

المعاملات

الاسم النوع مطلوب الوصف
keys ‪Array<string> نعم مصفوفة من المفاتيح المراد جلب العناصر المرتبطة بها.
callback ‪?(errors: ?Array<Error>

result: ?Array<Array <string>>) => void

لا دالة تُستدعى عند إكتمال العملية والحصول على البيانات أو عند حدوث خطأ.

مثال

AsyncStorage.getAllKeys((err, keys) => {
  AsyncStorage.multiGet(keys, (err, stores) => {
    stores.map((result, i, store) => {
      // get at each store's key/value so you can work with it
      let key = store[i][0];
      let value = store[i][1];
    });
  });
});

‎multiSet()‎

static multiSet(keyValuePairs: Array<Array <string>>, [callback]: ?(errors: ?Array<Error>) => void)

تُحزِّن عددًا من الازواج (key: value) دفعةً واحدة. عند اكتمال العملية تحصل على ردّ نداء واحد يحتوي على جميع الأخطاء في حال حدوثها. تُرجع كائن من النوع Promise.

multiSet([['k1', 'val1'], ['k2', 'val2']], cb);

المعاملات:

الاسم النوع مطلوب الوصف
keyValuePairs ‪Array<Array <string>> نعم مصفومة من الازواج (key: value).
callback ‪?(errors: ?Array<Error>,

result: ?Array<Array <string>>) => void

لا دالة تُستدعى عند اكتمال العملة أو عند حدوث خطأ.

‎multiRemove()‎

static multiRemove(keys: Array<string>, [callback]: ?(errors: ?Array<Error>) => void)

تحذف جميع البيانات المرتبطة بالمفاتيح المُعطاة للدالة. تُرجع كائن من النوع Promise.

المعاملات

الاسم النوع مطلوب الوصف
keys ‪Array<string> نعم مصفوفة من المفاتيح المراد حذفها.
callback ‪?(errors: ?Array<Error>) => void لا دالة تُستدعى عند إكتمال العملية أو عند حدوث خطأ.

مثال

let keys = ['k1', 'k2'];
AsyncStorage.multiRemove(keys, (err) => {
  // keys k1 &amp; k2 removed, if they existed
  // do most stuff after removal (if you want)
});

multiMerge

static multiMerge(keyValuePairs: Array<Array <string>>, [callback]: ?(errors: ?Array<Error>) => void)

تُحدِّث قيم أكثر من مفتاح واحد دفعة واحدة. ويجب أن تكون جميع القيم والمفاتيح في شكل سلسلة JSON. تُرجع كائن من النوع Promise.

ملاحظة: بعض عمليات التنفيذ للمنصات الأصيلة (Native implementations) لا تدعم هذه الدالة.

المعاملات

الاسم النوع مطلوب الوصف
keyValuePairs ‪Array<Array <string>> نعم مصفومة من الأزواج (key: value).
callback ‪?(errors: ?Array<Error>,

result: ?Array<Array <string>>) => void

لا دالة تُستدعى عند إكتمال العملة أو عند حدوث خطأ.

مثال

// first user, initial values
let UID234_object = {
  name: 'Chris',
  age: 30,
  traits: { hair: 'brown', eyes: 'brown' }
};

// first user, delta values
let UID234_delta = {
  age: 31,
  traits: { eyes: 'blue', shoe_size: 10 }
};

// second user, initial values
let UID345_object = {
  name: 'Marge',
  age: 25,
  traits: { hair: 'blonde', eyes: 'blue' }
};

// second user, delta values
let UID345_delta = {
  age: 26,
  traits: { eyes: 'green', shoe_size: 6 }
};

let multi_set_pairs = [
  ['UID234', JSON.stringify(UID234_object)],
  ['UID345', JSON.stringify(UID345_object)]
];
let multi_merge_pairs = [
  ['UID234', JSON.stringify(UID234_delta)],
  ['UID345', JSON.stringify(UID345_delta)]
];

AsyncStorage.multiSet(multi_set_pairs, (err) => {
  AsyncStorage.multiMerge(multi_merge_pairs, (err) => {
    AsyncStorage.multiGet(['UID234', 'UID345'], (err, stores) => {
      stores.map((result, i, store) => {
        let key = store[i][0];
        let val = store[i][1];
        console.log(key, val);
      });
    });
  });
});

// Console log results:
// => UID234 {"name":"Chris","age":31,"traits":{"shoe_size":10,"hair":"brown","eyes":"blue"}}
// => UID345 {"name":"Marge","age":26,"traits":{"shoe_size":6,"hair":"blonde","eyes":"green"}}

المصادر