ตัวเลือกของฉันสำหรับการจัดเก็บข้อมูลเมื่อใช้ React Native คืออะไร (iOS และ Android) [ปิด]


230

ฉันยังใหม่ในโลกของ React Native และโดยทั่วไปในโลกมือถือ / พื้นเมืองเช่นกันและฉันกำลังค้นหาเอกสารที่ขาดหายไปเล็กน้อยเมื่อพูดถึงการคงอยู่ของข้อมูล

ฉันมีตัวเลือกอะไรสำหรับการจัดเก็บข้อมูลใน React Native และความหมายของแต่ละประเภท ตัวอย่างเช่นฉันเห็นว่ามีที่จัดเก็บในตัวเครื่องและที่เก็บข้อมูลแบบ async แต่ฉันก็เห็นสิ่งต่าง ๆ เช่นอาณาจักรและฉันสับสนว่าทั้งหมดนี้จะทำงานกับฐานข้อมูลภายนอกได้อย่างไร

ฉันอยากรู้โดยเฉพาะ:

  • ตัวเลือกต่าง ๆ สำหรับการคงอยู่ของข้อมูลคืออะไร?
  • สำหรับแต่ละข้อ จำกัด ของการคงอยู่นั้นคืออะไร (เช่นเมื่อไม่มีข้อมูลอีกต่อไป) ตัวอย่างเช่น: เมื่อปิดแอปพลิเคชั่นรีสตาร์ทโทรศัพท์ ฯลฯ
  • สำหรับแต่ละข้อมีความแตกต่าง (นอกเหนือจากการตั้งค่าทั่วไป) ระหว่างการติดตั้งใน iOS กับ Android หรือไม่
  • ตัวเลือกเปรียบเทียบสำหรับการเข้าถึงข้อมูลแบบออฟไลน์ได้อย่างไร (หรือการเข้าถึงแบบออฟไลน์โดยทั่วไปจัดการอย่างไร)
  • มีข้อควรพิจารณาอื่น ๆ อีกไหมที่ฉันควรจำไว้?

ขอบคุณสำหรับความช่วยเหลือของคุณ!


หากคุณต้องการเก็บข้อมูล sensitie คุณสามารถดูได้ที่: stackoverflow.com/questions/45547657/…
Julien Kode

เห็นได้ชัดว่าใช้ Realm
Fattie

เพียงแค่ใช้ back4app หากคุณต้องการโซลูชันที่เรียบง่าย (เช่น parse.com)
Fattie

15
บ่อยครั้งในกรณีของ SO คำถามที่มีประโยชน์กับคนจำนวนมากถูกปิดโดยใครบางคน ... นี่อาจจะเป็นการบอกชุมชนเกี่ยวกับ 'กฎ' และวิธีการที่พวกเขานำไปใช้ ลองดูโพสต์ที่มีการใช้งานบ่อยที่สุดและดูว่ามีกี่คนที่ติดตาม 'กฎ' ใครฟัง?
user2330237

คำตอบ:


286

นี่คือสิ่งที่ฉันได้เรียนรู้ขณะที่ฉันกำหนดวิธีที่ดีที่สุดในการก้าวไปข้างหน้ากับโครงการแอปปัจจุบันของฉัน

Async Storage ("built-in" เพื่อตอบสนอง Native)

ฉันใช้ AsyncStorage สำหรับแอปที่กำลังดำเนินการ พื้นที่เก็บข้อมูลอยู่ในอุปกรณ์ไม่ถูกเข้ารหัส (ดังที่กล่าวไว้ในคำตอบอื่น) หายไปถ้าคุณลบแอพ แต่ควรบันทึกเป็นส่วนหนึ่งของการสำรองข้อมูลของอุปกรณ์และยังคงอยู่ในระหว่างการอัปเกรด (ทั้งการอัปเกรดเนทีฟ )

สรุป: การจัดเก็บในท้องถิ่น; คุณให้โซลูชันการซิงค์ / สำรองข้อมูลของคุณเอง

SQLite

โครงการอื่น ๆ ที่ฉันได้ทำใช้ sqlite3 เพื่อจัดเก็บแอพ สิ่งนี้จะช่วยให้คุณได้รับประสบการณ์คล้ายกับ SQL ด้วยฐานข้อมูลที่สามารถบีบอัดได้ซึ่งสามารถส่งไปยังและจากอุปกรณ์ได้ ฉันไม่ได้มีประสบการณ์ใด ๆ ในการซิงค์พวกเขากับแบ็คเอนด์ แต่ฉันคิดว่ามีห้องสมุดหลายแห่ง มีไลบรารี RN สำหรับเชื่อมต่อกับ SQLite

ข้อมูลจะถูกจัดเก็บในรูปแบบฐานข้อมูลดั้งเดิมของคุณด้วยฐานข้อมูลตารางคีย์ดัชนี ฯลฯ ทั้งหมดที่บันทึกไว้ในดิสก์ในรูปแบบไบนารี สามารถเข้าถึงข้อมูลได้โดยตรงผ่านทางบรรทัดคำสั่งหรือแอพที่มีไดรเวอร์ SQLite

สรุป: การจัดเก็บในท้องถิ่น; คุณจัดหาการซิงค์และสำรองข้อมูล

Firebase

ข้อเสนอ Firebase เหนือสิ่งอื่นใดคือฐานข้อมูล noSQL แบบเรียลไทม์พร้อมกับที่เก็บเอกสาร JSON (เช่น MongoDB) หมายถึงการรักษาลูกค้าจาก 1 ถึง n หมายเลขให้ตรงกัน เอกสารพูดคุยเกี่ยวกับการคงอยู่แบบออฟไลน์ แต่สำหรับรหัสเนทีฟเท่านั้น (Swift / Obj-C, Java) ตัวเลือก JavaScript ของ Google ("เว็บ") ซึ่งใช้โดย React Native ไม่ได้มีตัวเลือกที่เก็บข้อมูลแคช (ดูการอัปเดต 2/18 ด้านล่าง) ไลบรารีถูกเขียนด้วยการสันนิษฐานว่าเว็บเบราว์เซอร์กำลังจะทำการเชื่อมต่อดังนั้นจะมีการเชื่อมต่อแบบกึ่งถาวร คุณอาจจะเขียนกลไกการแคชโลคัลเพื่อเสริมการเรียกใช้หน่วยเก็บ Firebase หรือคุณสามารถเขียนบริดจ์ระหว่างไลบรารีเนทีฟกับรีแอกทีฟเนทีฟ

อัปเดต 2/2018 ฉันได้พบ React Native Firebaseซึ่งมีอินเตอร์เฟส JavaScript ที่เข้ากันได้กับไลบรารี่ของ iOS และ Android (ทำในสิ่งที่ Google สามารถทำได้ / ควรจะทำ) ทำให้คุณได้รับโบนัสจาก React การสนับสนุนพื้นเมือง ด้วยการแนะนำร้านค้าเอกสาร JSON ของ Google ข้างฐานข้อมูลเรียลไทม์ฉันให้ Firebase ดูดีเป็นครั้งที่สองสำหรับแอปแบบเรียลไทม์ที่ฉันวางแผนจะสร้าง

ฐานข้อมูลตามเวลาจริงถูกจัดเก็บเป็นแผนผังคล้าย JSON ที่คุณสามารถแก้ไขบนเว็บไซต์และนำเข้า / ส่งออกได้อย่างง่ายดาย

สรุป: ด้วยปฏิกิริยาตอบสนองพื้นเมือง Firebase RN ได้รับประโยชน์เช่นเดียวกับ Swift และ Java [/ อัปเดต] ปรับขนาดได้ดีสำหรับอุปกรณ์ที่เชื่อมต่อเครือข่าย ต้นทุนต่ำสำหรับการใช้งานต่ำ ผสานรวมกับข้อเสนอคลาวด์อื่น ๆ ของ Google ได้เป็นอย่างดี ข้อมูลสามารถมองเห็นและแก้ไขได้จากส่วนต่อประสาน

ดินแดน

Update 4/2020 MongoDB ได้รับอาณาจักรและกำลังวางแผนที่จะรวมเข้ากับ MongoDB Stitch (กล่าวถึงด้านล่าง) นี้มีลักษณะที่น่าตื่นเต้นมาก


ยังเป็นที่เก็บอ็อบเจ็กต์แบบเรียลไทม์ด้วยการซิงโครไนซ์เครือข่ายอัตโนมัติ พวกเขาโน้มน้าวตัวเองว่าเป็น "อุปกรณ์ก่อน" และวิดีโอสาธิตแสดงให้เห็นว่าอุปกรณ์จัดการการเชื่อมต่อเครือข่ายเป็นระยะ ๆ หรือสูญเสีย

พวกเขาเสนอที่เก็บวัตถุรุ่นฟรีที่คุณโฮสต์บนเซิร์ฟเวอร์ของคุณเองหรือในโซลูชันคลาวด์เช่น AWS หรือ Azure คุณยังสามารถสร้างร้านค้าในหน่วยความจำที่ไม่คงอยู่กับอุปกรณ์ร้านค้าเฉพาะอุปกรณ์ที่ไม่ซิงค์กับเซิร์ฟเวอร์ร้านค้าเซิร์ฟเวอร์แบบอ่านอย่างเดียวและตัวเลือกการอ่าน - เขียนแบบเต็มสำหรับการซิงโครไนซ์กับอุปกรณ์หนึ่งเครื่องหรือมากกว่า พวกเขามีตัวเลือกระดับมืออาชีพและองค์กรที่ค่าใช้จ่ายเพิ่มเติมล่วงหน้าต่อเดือนกว่า Firebase

ต่างจาก Firebase ความสามารถของ Realm ทั้งหมดได้รับการสนับสนุนใน React Native และ Xamarin เช่นเดียวกับในแอพ Swift / ObjC / Java (native)

ข้อมูลของคุณเชื่อมโยงกับวัตถุในรหัสของคุณ เนื่องจากวัตถุเหล่านั้นถูกกำหนดคุณจึงมี schema และการควบคุมเวอร์ชันเป็นสิ่งจำเป็นสำหรับการสร้างรหัส เข้าถึงได้โดยตรงผ่านเครื่องมือ GUI ที่ Realm มี ไฟล์ข้อมูลบนอุปกรณ์เข้ากันได้ข้ามแพลตฟอร์ม

สรุป: อุปกรณ์ก่อนการซิงโครไนซ์ทางเลือกพร้อมแผนฟรีและแบบชำระเงิน คุณสมบัติทั้งหมดที่รองรับใน React Native การปรับขนาดแนวนอนมีราคาแพงกว่า Firebase

iCloud

ฉันไม่ได้เล่นมากกับอันนี้ แต่จะทำในอนาคตอันใกล้

หากคุณมีแอพเนทีฟที่ใช้ CloudKit คุณสามารถใช้ CloudKit JS เพื่อเชื่อมต่อกับคอนเทนเนอร์ของแอพจากเว็บแอป (หรือในกรณีของเราคือ React Native) ในสถานการณ์สมมตินี้คุณอาจมีแอพ iOS ดั้งเดิมและแอป React Native Android

เช่น Realm จะเก็บข้อมูลไว้ในเครื่องและซิงค์กับ iCloud เมื่อทำได้ มีร้านค้าสาธารณะสำหรับแอพของคุณและร้านค้าส่วนตัวสำหรับลูกค้าแต่ละราย ลูกค้าสามารถเลือกที่จะแชร์บางส่วนของร้านค้าหรือวัตถุกับผู้ใช้รายอื่น

ฉันไม่รู้ว่าการเข้าถึงข้อมูลดิบนั้นง่ายเพียงใด schema ที่สามารถตั้งค่าบนเว็บไซต์ของ Apple

สรุป: ยอดเยี่ยมสำหรับแอปที่มีเป้าหมายเป็น Apple

Couchbase

ชื่อใหญ่ บริษัท ใหญ่ ๆ ที่อยู่เบื้องหลัง Community Edition และ Enterprise Edition มีค่าใช้จ่ายในการสนับสนุนมาตรฐาน

พวกเขามีบทช่วยสอนบนเว็บไซต์ของพวกเขาสำหรับการเชื่อมต่อกับ React Native ฉันยังไม่ได้ใช้เวลามากกับสิ่งนี้ แต่ดูเหมือนจะเป็นทางเลือกที่ทำงานได้กับ Realm ในแง่ของการทำงาน ฉันไม่รู้ว่าการเข้าถึงข้อมูลของคุณนอกแอพของคุณหรือ API ใด ๆ ที่คุณสร้างนั้นง่ายเพียงใด

[แก้ไข: พบลิงค์เก่าที่พูดถึง Couchbase และ CouchDB และ CouchDB อาจเป็นตัวเลือกอื่นที่ควรพิจารณา ทั้งสองมีความสัมพันธ์ทางประวัติศาสตร์ แต่ผลิตภัณฑ์ที่แตกต่างอย่างสิ้นเชิงในปัจจุบัน ดูการเปรียบเทียบนี้]

สรุป: ดูเหมือนว่าจะมีความสามารถที่คล้ายกันเป็นอาณาจักร สามารถซิงค์ได้เฉพาะอุปกรณ์หรือซิงค์ ฉันต้องลองดู

MongoDB

อัปเดต 4/2020

Mongo ได้รับอาณาจักรและวางแผนที่จะรวม MongoDB Stitch (กล่าวถึงด้านล่าง) กับอาณาจักร (ดังที่กล่าวไว้ข้างต้น)


ฉันใช้ฝั่งเซิร์ฟเวอร์นี้สำหรับแอปที่ใช้ AsyncStorage ในเครื่อง ฉันชอบที่ทุกอย่างถูกเก็บไว้เป็นวัตถุ JSON ทำให้การส่งผ่านไปยังอุปกรณ์ไคลเอนต์ตรงไปตรงมามาก ในกรณีการใช้งานของฉันมันถูกใช้เป็นแคชระหว่างผู้ให้บริการอัปสตรีมข้อมูลคู่มือทีวีและอุปกรณ์ไคลเอนต์ของฉัน

ไม่มีโครงสร้างที่ยากต่อข้อมูลเช่นสกีมาดังนั้นทุกวัตถุจะถูกเก็บไว้เป็น "เอกสาร" ที่สามารถค้นหาได้ง่ายกรองและอื่น ๆ วัตถุ JSON ที่คล้ายกันอาจมีคุณสมบัติเพิ่มเติม (แต่แตกต่างกัน) หรือวัตถุลูกช่วยให้ มีความยืดหยุ่นมากในการจัดโครงสร้างวัตถุ / ข้อมูลของคุณ

ฉันไม่ได้ลองใช้คุณสมบัติการซิงโครไนซ์ของไคลเอนต์ใด ๆ หรือไม่ได้ใช้มัน ตอบสนองรหัสพื้นเมืองสำหรับ MongoDB ไม่อยู่

สรุป: โซลูชัน NoSQL เฉพาะที่เท่านั้นไม่มีตัวเลือกการซิงค์ที่ชัดเจนเช่น Realm หรือ Firebase

อัปเดต 2/2019

MongoDB มี "ผลิตภัณฑ์" (หรือบริการ) เรียกว่า Stitch เนื่องจากไคลเอนต์ (ในความหมายของเว็บเบราว์เซอร์และโทรศัพท์) ไม่ควรพูดคุยกับ MongoDB โดยตรง (ซึ่งทำโดยใช้รหัสบนเซิร์ฟเวอร์ของคุณ) พวกเขาสร้างส่วนหน้าแบบไร้เซิร์ฟเวอร์ที่แอพของคุณสามารถเชื่อมต่อได้ด้วยหากคุณเลือกใช้ โซลูชันโฮสต์ (Atlas) เอกสารของพวกเขาทำให้ดูเหมือนว่ามีตัวเลือกการซิงค์ที่เป็นไปได้

บทความนี้จากเดือนธันวาคม 2018 กล่าวถึงการใช้ React Native, Stitch และ MongoDB ในแอปตัวอย่างพร้อมกับตัวอย่างอื่น ๆ ที่ลิงก์ในเอกสาร ( https://www.mongodb.com/blog/post/building-ios-and-android-apps) -with-the-mongodb-stitch-react-native-sdk )

Twilio Sync

ตัวเลือก NoSQL อีกตัวสำหรับการซิงโครไนซ์คือการซิงค์ของ Twilio จากไซต์ของพวกเขา: "การซิงค์ช่วยให้คุณจัดการสถานะของอุปกรณ์ทุกชนิดตามเวลาจริงโดยไม่ต้องจัดการกับโครงสร้างพื้นฐานด้านหลัง"

ฉันมองว่านี่เป็นทางเลือกของ Firebase สำหรับหนึ่งในโครงการดังกล่าวโดยเฉพาะหลังจากพูดคุยกับทั้งสองทีม ฉันชอบเครื่องมือสื่อสารอื่น ๆ ของพวกเขาและใช้พวกเขาสำหรับการส่งข้อความอัปเดตจากเว็บแอปง่าย ๆ


[แก้ไข] ฉันได้ใช้เวลากับ Realm มาตั้งแต่แรกที่ฉันเขียนสิ่งนี้ ฉันชอบวิธีที่ฉันไม่ต้องเขียน API เพื่อซิงค์ข้อมูลระหว่างแอพกับเซิร์ฟเวอร์คล้ายกับ Firebase ฟังก์ชั่นที่ไม่ต้องใช้เซิร์ฟเวอร์นั้นดูจะมีประโยชน์มากสำหรับสองสิ่งนี้ จำกัด จำนวนของโค้ดแบ็คเอนด์ที่ฉันต้องเขียน

ฉันชอบความยืดหยุ่นของแหล่งข้อมูล MongoDB ดังนั้นจึงกลายเป็นตัวเลือกของฉันสำหรับฝั่งเซิร์ฟเวอร์ของแอพที่ใช้การเชื่อมต่อบนเว็บและอื่น ๆ

ฉันพบRESTHeartซึ่งสร้าง RESTful API ที่ง่ายและปรับขนาดได้ไปยัง MongoDB ไม่ควรยากเกินไปที่จะสร้างส่วนประกอบ React (Native) ที่อ่านและเขียนวัตถุ JSON ไปยัง RESTHeart ซึ่งส่งผ่านไปยัง / จาก MongoDB


[แก้ไข] ฉันเพิ่มข้อมูลเกี่ยวกับวิธีจัดเก็บข้อมูล บางครั้งสิ่งสำคัญคือต้องรู้ว่าคุณอาจต้องทำงานมากแค่ไหนในระหว่างการพัฒนาและทดสอบหากคุณต้องปรับแต่งและทดสอบข้อมูล


การแก้ไข 2/2019ฉันทดลองกับตัวเลือกเหล่านี้หลายตัวเมื่อออกแบบโครงการที่เกิดขึ้นพร้อมกันในปีที่ผ่านมา (2018) บางคนพูดถึงการ จำกัด การทำงานพร้อมกันอย่างหนักและเบาในเอกสารของพวกเขา (Firebase มีความยากในการเชื่อมต่อ 10,000 ครั้งในขณะที่ Twilio มีข้อ จำกัด ที่นุ่มนวลซึ่งสามารถชนได้ตามการหารือกับทั้งสองทีมที่ AltConf)

หากคุณกำลังออกแบบแอพสำหรับผู้ใช้นับหมื่นถึงแสนคนโปรดเตรียมข้อมูลส่วนหลังให้พร้อม


1
แล้ว Redux ล่ะ
HIRA THAKUR

4
@LeonardoDaCodinchi Redux จะเป็นประโยชน์สำหรับการจัดการสถานะ แต่ไม่มีฟังก์ชั่นการจัดเก็บข้อมูลถาวร
walshie4

1
เหตุใดจึงไม่ Redux-persistent ในรายการของคุณ คุณช่วยเพิ่มบางอย่างเกี่ยวกับมันได้ไหม ถ้ามันแย่ขนาดนั้น
Shahzad Mirza

เมื่อฉันเขียนสิ่งนี้ฉันไม่ได้ใช้เวลาดูสิ่งที่เกี่ยวข้องกับ Redux แอป React และ Native-Native ที่มีอยู่ของฉัน (ซึ่งเกือบสองปีแล้วและอยู่ในโหมดบำรุงรักษา) เท่านั้นอย่าใช้งาน บางทีในโครงการในอนาคตมันจะเกิดขึ้น ณ จุดนี้ฉันสามารถเสนอความเห็นที่ยุติธรรม
ไบรอันสก็อต

1
ฉันชอบวิธีที่คุณวางทุกอย่าง มันจะดีกว่าถ้าคุณเพิ่มข้อดีและข้อเสียสำหรับแต่ละข้อ (เช่นลิงก์ของเอกสารด้วย) เช่นเดียวกับที่ฉันค้นพบหนึ่งAsyncStorageที่รองรับเพียง 6 MB ใน Android ในขณะที่ iOS ไม่มีข้อ จำกัด ดังกล่าว
Jimit Patel

58

รวดเร็วและสกปรก: เพียงใช้Redux + react-redux + redux-persist + AsyncStorageสำหรับการตอบสนองดั้งเดิม

มันเข้ากันได้ดีกับโลกของคนพื้นเมืองและทำงานอย่างมีเสน่ห์สำหรับทั้ง android และ ios นอกจากนี้ยังมีชุมชนที่เข้มแข็งอยู่รอบ ๆ และมีข้อมูลมากมาย

สำหรับตัวอย่างการใช้งานให้ดูF8Appจาก Facebook

ตัวเลือกต่าง ๆ สำหรับการคงอยู่ของข้อมูลคืออะไร?

ด้วย native native คุณอาจต้องการใช้ redux และ redux-persist มันสามารถใช้เอนจินการจัดเก็บข้อมูลหลาย ๆ AsyncStorage และ redux-persist-filesystem-storage เป็นตัวเลือกสำหรับ RN

มีตัวเลือกอื่น ๆ เช่น Firebase หรือ Realm แต่ฉันไม่เคยใช้มันในโครงการ RN

สำหรับแต่ละข้อ จำกัด ของการคงอยู่นั้นคืออะไร (เช่นเมื่อไม่มีข้อมูลอีกต่อไป) ตัวอย่างเช่น: เมื่อปิดแอปพลิเคชั่นรีสตาร์ทโทรศัพท์ ฯลฯ

การใช้ redux + redux-persist คุณสามารถกำหนดสิ่งที่ยังคงอยู่และสิ่งที่ไม่ เมื่อไม่ยืนยันข้อมูลจะมีอยู่ในขณะที่แอปทำงานอยู่ เมื่อยืนยันข้อมูลจะยังคงอยู่ระหว่างการประมวลผลแอพ (ปิด, เปิด, รีสตาร์ทโทรศัพท์ ฯลฯ )

AsyncStorage มีขีด จำกัด เริ่มต้นที่ 6MB บน Android เป็นไปได้ที่จะกำหนดค่าขีด จำกัด ที่ใหญ่กว่า (บนโค้ด Java) หรือใช้หน่วยเก็บข้อมูล redux-persist-filesystem เป็นเครื่องมือเก็บข้อมูลสำหรับ Android

สำหรับแต่ละข้อมีความแตกต่าง (นอกเหนือจากการตั้งค่าทั่วไป) ระหว่างการติดตั้งใน iOS กับ Android หรือไม่

การใช้ redux + redux-persist + AsyncStorage การตั้งค่าจะเหมือนกันทั้งใน Android และ iOS

ตัวเลือกเปรียบเทียบสำหรับการเข้าถึงข้อมูลแบบออฟไลน์ได้อย่างไร (หรือการเข้าถึงแบบออฟไลน์โดยทั่วไปจัดการอย่างไร)

การใช้ redux การเข้าถึงนอกระบบนั้นเกือบจะเป็นไปโดยอัตโนมัติด้วยส่วนการออกแบบของมัน (ผู้สร้างแอ็คชั่นและตัวลด)

ข้อมูลทั้งหมดที่คุณดึงข้อมูลและจัดเก็บมีอยู่คุณสามารถจัดเก็บข้อมูลพิเศษเพื่อระบุสถานะ (การดึงข้อมูลสำเร็จความผิดพลาด) และเวลาที่ดึงข้อมูลได้ โดยปกติการร้องขอการดึงข้อมูลจะไม่ทำให้ข้อมูลเก่าและองค์ประกอบของคุณเพิ่งอัปเดตเมื่อได้รับข้อมูลใหม่

เช่นเดียวกันนำไปใช้ในทิศทางอื่น คุณสามารถจัดเก็บข้อมูลที่คุณส่งไปยังเซิร์ฟเวอร์และยังคงค้างอยู่และจัดการกับมันได้

มีข้อควรพิจารณาอื่น ๆ อีกไหมที่ฉันควรจำไว้?

React ส่งเสริมวิธีการสร้างแอปที่มีปฏิกิริยาโต้ตอบและ Redux เหมาะสมกับมันเป็นอย่างดี คุณควรลองก่อนใช้ตัวเลือกที่คุณจะใช้ในแอพ Android หรือ iOS ปกติของคุณ นอกจากนี้คุณจะพบเอกสารและความช่วยเหลือเพิ่มเติมอีกมากมาย


3
ขอบคุณสำหรับการดำน้ำลึกใน AsyncStorage / Redux Persist ฉันกำลังมองหาภาพรวมของตัวเลือกทั้งหมดมากขึ้นนั่นคือเหตุผลเดียวที่ฉันไม่ได้เลือกสิ่งนี้เป็นคำตอบอย่างเป็นทางการ
Sia

9

คนด้านบนมีบันทึกที่ถูกต้องสำหรับการจัดเก็บข้อมูล แต่ถ้าคุณต้องพิจารณาข้อมูล PII ใด ๆ ที่จำเป็นต้องจัดเก็บคุณสามารถซ่อนไว้ในพวงกุญแจโดยใช้บางอย่างเช่นhttps://github.com/oblador/react-native-keychainเนื่องจาก ASyncStorage ไม่มีการเข้ารหัส มันสามารถนำไปใช้เป็นส่วนหนึ่งของการกำหนดค่าคงอยู่ในบางสิ่งบางอย่างเช่น redux-persist


1

คุณสามารถใช้ที่จัดเก็บข้อมูลให้ตรงที่ใช้งานง่ายกว่าที่เก็บข้อมูลของ async ไลบรารีนี้ยอดเยี่ยมที่ใช้ที่เก็บ async เพื่อบันทึกข้อมูลแบบอะซิงโครนัสและใช้หน่วยความจำในการโหลดและบันทึกข้อมูลแบบซิงโครนัสทันทีดังนั้นเราจึงบันทึกข้อมูล async ลงในหน่วยความจำและใช้ในการซิงค์แอป

import SyncStorage from 'sync-storage';

SyncStorage.set('foo', 'bar');
const result = SyncStorage.get('foo');
console.log(result); // 'bar'

1

คุณสามารถใช้ Realm หรือ Sqlite หากคุณต้องการจัดการชนิดข้อมูลที่ซับซ้อน

มิฉะนั้นไปกับ inbuilt ตอบสนองพื้นเมือง asynstorage


0

เราไม่ต้องการ redux-persist เราเพียงแค่ใช้ redux สำหรับการคงอยู่

react-redux + AsyncStorage = redux-persist

ดังนั้นภายในไฟล์ createotre เพียงแค่เพิ่มบรรทัดเหล่านี้

store.subscribe(async()=> await AsyncStorage.setItem("store", JSON.stringify(store.getState())))

สิ่งนี้จะอัปเดต AsyncStorage เมื่อใดก็ตามที่มีการเปลี่ยนแปลงบางอย่างในที่เก็บ redux

จากนั้นโหลดร้านค้าที่แปลง json เมื่อใดที่แอพโหลดขึ้นมา และตั้งค่าร้านค้าอีกครั้ง

เนื่องจาก redux-persist สร้างปัญหาเมื่อใช้ wix react-native-navigation หากเป็นกรณีนั้นฉันต้องการใช้ redux อย่างง่ายกับฟังก์ชั่นสมาชิกข้างต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.