ฉันแค่ต้องการเพิ่มความแตกต่างในทางปฏิบัติจากตอนที่ฉันใช้รหัส RxJS ที่ได้รับแรงบันดาลใจจาก Redux
ฉันแมปการกระทำแต่ละประเภทกับอินสแตนซ์หัวเรื่อง ส่วนประกอบ stateful แต่ละรายการจะมี Subject ที่ถูกแมปลงในฟังก์ชันตัวลด สตรีมตัวลดทั้งหมดจะรวมกับmerge
แล้วscan
ส่งออกสถานะ ค่าเริ่มต้นถูกกำหนดไว้startWith
ก่อนหน้าไฟล์scan
. ฉันใช้publishReplay(1)
สำหรับรัฐ แต่อาจลบออกในภายหลัง
ฟังก์ชันการเรนเดอร์ตอบสนองบริสุทธิ์จะใช้เฉพาะที่ที่คุณสร้างข้อมูลเหตุการณ์โดยการส่งในผู้ผลิต / หัวเรื่องทั้งหมด
หากคุณมีส่วนประกอบย่อยคุณต้องอธิบายว่าสถานะเหล่านั้นรวมเป็นของคุณอย่างไร combineLatest
อาจเป็นจุดเริ่มต้นที่ดีสำหรับสิ่งนั้น
ความแตกต่างที่โดดเด่นในการใช้งาน:
ไม่มีตัวกลางเพียงตัวดำเนินการ rxjs ฉันคิดว่านี่เป็นพลังและจุดอ่อนที่ใหญ่ที่สุด คุณยังสามารถยืมแนวคิดได้ แต่ฉันพบว่าเป็นการยากที่จะขอความช่วยเหลือจากชุมชนในเครือเช่น redux และ cycle.js เนื่องจากเป็นอีกหนึ่งโซลูชันที่กำหนดเอง นั่นเป็นเหตุผลที่ฉันต้องเขียน "ฉัน" แทน "เรา" ในข้อความนี้
ไม่มีสวิตช์ / เคสหรือสตริงสำหรับประเภทการดำเนินการ คุณมีวิธีแยกการกระทำแบบไดนามิกมากขึ้น
rxjs สามารถใช้เป็นเครื่องมือที่อื่นได้และไม่มีอยู่ในการจัดการของรัฐ
จำนวนผู้ผลิตน้อยกว่าประเภทการกระทำ (?) ฉันไม่แน่ใจเกี่ยวกับเรื่องนี้ แต่คุณสามารถมีปฏิกิริยาหลายอย่างในองค์ประกอบหลักที่ฟังส่วนประกอบย่อย นั่นหมายถึงรหัสที่จำเป็นน้อยกว่าและมีความซับซ้อนน้อยลง
คุณเป็นเจ้าของโซลูชัน ไม่จำเป็นต้องมีกรอบ ดีและไม่ดี คุณจะต้องเขียนกรอบของคุณเอง
เป็นแฟร็กทัลมากกว่ามากและคุณสามารถสมัครรับการเปลี่ยนแปลงจากแผนผังย่อยหรือหลายส่วนของโครงสร้างสถานะแอปได้อย่างง่ายดาย
- เดาว่าการทำมหากาพย์เป็นเรื่องง่ายอย่างที่สามารถทำได้ง่ายเพียงใด? ง่ายมาก
ฉันยังทำงานเพื่อประโยชน์ที่ใหญ่กว่ามากซึ่งมีการอธิบายส่วนประกอบย่อยว่าเป็นสตรีม ซึ่งหมายความว่าเราไม่จำเป็นต้องรวมสถานะแม่และลูกในตัวลดเนื่องจากเราสามารถ ("just") รวมสถานะซ้ำ ๆ ตามโครงสร้างส่วนประกอบ
ฉันยังคิดเกี่ยวกับการข้ามการตอบสนองและไปกับ snabbdom หรืออย่างอื่นจนกว่า React จะจัดการสถานะปฏิกิริยาได้ดีขึ้น ทำไมเราต้องสร้างสถานะของเราขึ้นไปเพื่อทำลายมันผ่านอุปกรณ์ประกอบฉากอีกครั้ง? ดังนั้นฉันจะพยายามสร้างเวอร์ชัน 2 ของรูปแบบนี้ด้วย Snabbdom
นี่คือตัวอย่างข้อมูลขั้นสูง แต่มีขนาดเล็กที่ไฟล์ state.ts สร้างสตรีมสถานะ นี่คือสถานะขององค์ประกอบรูปแบบ ajax ซึ่งได้รับวัตถุของเขตข้อมูล (อินพุต) ที่มีกฎการตรวจสอบความถูกต้องและรูปแบบ css ในไฟล์นี้เราเพียงแค่ใช้ชื่อฟิลด์ (คีย์ออบเจ็กต์) เพื่อรวมสถานะของเด็กทั้งหมดเข้าในสถานะแบบฟอร์ม
export default function create({
Observable,
ajaxInputs
}) {
const fieldStreams = Object.keys(ajaxInputs)
.map(function onMap(fieldName) {
return ajaxInputs[fieldName].state.stream
.map(function onMap(stateData) {
return {stateData, fieldName}
})
})
const stateStream = Observable.combineLatest(...fieldStreams)
.map(function onMap(fieldStreamDataArray) {
return fieldStreamDataArray.reduce(function onReduce(acc, fieldStreamData) {
acc[fieldStreamData.fieldName] = fieldStreamData.stateData
return acc
}, {})
})
return {
stream: stateStream
}
}
แม้ว่าโค้ดอาจไม่ได้แยกออกจากกันมากนัก แต่ก็แสดงให้เห็นว่าคุณสามารถสร้างสถานะขึ้นไปได้อย่างไรและคุณจะสร้างเหตุการณ์แบบไดนามิกได้อย่างไรอย่างง่ายดาย ราคาที่ต้องจ่ายคือคุณต้องเข้าใจรหัสรูปแบบอื่น และฉันชอบที่จะจ่ายในราคานั้น