ตามที่ทราบ: ฉันได้อ่านเอกสารสำหรับ Redux (Baobab ด้วย) และฉันได้ทำส่วนแบ่งที่ยุติธรรมของ Googling & test
ทำไมจึงแนะนำอย่างยิ่งว่าแอป Redux มีเพียงร้านเดียว?
ฉันเข้าใจข้อดี / ข้อเสียของการตั้งค่าแบบ Single-store และการตั้งค่าแบบหลายสาขา ( มีคำถาม & คำตอบมากมายในเรื่องนี้ )
IMO การตัดสินใจทางสถาปัตยกรรมนี้เป็นของผู้พัฒนาแอพตามความต้องการของโครงการ เหตุใดจึงแนะนำอย่างยิ่งสำหรับ Redux ถึงขั้นที่ทำให้เกิดเสียงบังคับ ( แม้ว่าจะไม่มีสิ่งใดหยุดยั้งเราในการสร้างร้านค้าหลายแห่ง )
แก้ไข: ข้อเสนอแนะหลังจากแปลงเป็นร้านค้าเดียว
หลังจากไม่กี่เดือนที่ทำงานกับ redux ในสิ่งที่หลายคนจะพิจารณาสปาที่ซับซ้อนฉันสามารถพูดได้ว่าโครงสร้างร้านเดียวได้รับความสุขที่บริสุทธิ์ในการทำงานกับ
บางจุดที่อาจช่วยให้ผู้อื่นเข้าใจว่าเหตุใดร้านค้าเดียวกับร้านค้าจำนวนมากจึงเป็นคำถามที่สงสัยในหลายกรณีการใช้งาน:
- มันน่าเชื่อถือ : เราใช้ตัวเลือกเพื่อขุดผ่านสถานะแอพและรับข้อมูลที่เกี่ยวข้องกับบริบท เรารู้ว่าข้อมูลที่จำเป็นทั้งหมดอยู่ในร้านเดียว มันหลีกเลี่ยงการตั้งคำถามทั้งหมดว่าประเด็นปัญหาของรัฐจะอยู่ที่ไหน
- มันเร็ว : ร้านค้าของเรามี 100 reducers ใกล้ถ้าไม่มาก แม้ในจำนวนนั้นมีเพียง reducers เพียงเล็กน้อยเท่านั้นที่ประมวลผลข้อมูลในการแจกจ่ายใด ๆ ที่ได้รับ แต่ผู้อื่นเพียงแค่คืนสถานะก่อนหน้า อาร์กิวเมนต์ที่ร้านค้าขนาดใหญ่ / ซับซ้อน ( nbr of reducers ) ช้านั้นเป็นสิ่งที่สงสัย อย่างน้อยเราไม่เคยเห็นปัญหาเรื่องประสิทธิภาพที่มาจากที่นั่น
- การดีบักที่เป็นมิตร : ในขณะที่นี่เป็นข้อโต้แย้งที่น่าเชื่อถือที่สุดในการใช้ redux โดยรวม แต่ก็มีสำหรับร้านค้าเดี่ยวและร้านค้าหลายแห่ง เมื่อสร้างแอปที่คุณถูกผูกไว้ว่ามีข้อผิดพลาดสถานะในกระบวนการ ( โปรแกรมเมอร์ผิดพลาด ) มันเป็นเรื่องปกติ PITA คือเมื่อข้อผิดพลาดเหล่านั้นใช้เวลาหลายชั่วโมงในการดีบัก ขอขอบคุณร้านค้าเดียว ( และ redux-logger ) เราไม่เคยใช้เวลานานกว่าสองสามนาทีในการแก้ไขปัญหาสถานะใด ๆ
ตัวชี้ไม่กี่
ความท้าทายที่แท้จริงในการสร้างที่เก็บ redux ของคุณคือเมื่อตัดสินใจว่าจะจัดโครงสร้างอย่างไร ประการแรกเนื่องจากการเปลี่ยนโครงสร้างไปตามถนนเป็นเพียงความเจ็บปวดครั้งใหญ่ ประการที่สองเพราะส่วนใหญ่จะเป็นตัวกำหนดว่าคุณจะใช้อย่างไรและทำการสืบค้นข้อมูลแอปของคุณสำหรับกระบวนการใด ๆ มีคำแนะนำมากมายเกี่ยวกับวิธีจัดโครงสร้างร้านค้า ในกรณีของเราเราพบสิ่งต่อไปนี้ในอุดมคติ:
{
apis: { // data from various services
api1: {},
api2: {},
...
},
components: {} // UI state data for each widget, component, you name it
session: {} // session-specific information
}
หวังว่าข้อเสนอแนะนี้จะช่วยให้ผู้อื่น
แก้ไข 2 - เครื่องมือร้านค้าที่เป็นประโยชน์
สำหรับผู้ที่สงสัยว่าจะ "จัดการได้ง่าย" ในร้านเดียวซึ่งสามารถซับซ้อนได้อย่างรวดเร็ว มีเครื่องมือที่ช่วยแยกการพึ่งพาโครงสร้าง / ตรรกะของร้านค้าของคุณ
มีNormalizrซึ่งทำให้ข้อมูลของคุณเป็นแบบปกติโดยยึดตามสคีมา จากนั้นให้ส่วนต่อประสานที่ทำงานกับข้อมูลของคุณและดึงส่วนอื่น ๆ ของข้อมูลของคุณโดยid
คล้ายกับพจนานุกรม
ในตอนนั้นฉันไม่ได้รู้จัก Normalizr ฉันก็สร้างบางสิ่งขึ้นมาในบรรทัดเดียวกัน relational-jsonรับ schema และส่งคืนอินเตอร์เฟสแบบอิงตาราง ( เล็กน้อยเหมือนฐานข้อมูล ) ข้อได้เปรียบของ relational-json คือโครงสร้างข้อมูลของคุณอ้างอิงส่วนอื่น ๆ ของข้อมูลของคุณแบบไดนามิก ( เป็นหลักคุณสามารถสำรวจข้อมูลของคุณในทิศทางใดก็ได้เช่นเดียวกับวัตถุ JS ปกติ ) มันยังไม่โตเท่า Normalizr แต่ฉันใช้มันในการผลิตมาหลายเดือนแล้ว