หนึ่งในข้อได้เปรียบที่ใหญ่ที่สุดของReact.jsควรจะเป็นการแสดงผลด้านเซิร์ฟเวอร์ ปัญหาคือฟังก์ชันคีย์React.renderComponentToString()
เป็นแบบซิงโครนัสซึ่งทำให้ไม่สามารถโหลดข้อมูลอะซิงโครนัสใด ๆ ได้เนื่องจากลำดับชั้นของคอมโพเนนต์แสดงบนเซิร์ฟเวอร์
สมมติว่าฉันมีองค์ประกอบสากลสำหรับการแสดงความคิดเห็นซึ่งฉันสามารถวางไว้ที่ใดก็ได้บนหน้า มีเพียงคุณสมบัติเดียวตัวระบุบางประเภท (เช่น id ของบทความด้านล่างที่มีการใส่ความคิดเห็น) และทุกอย่างจะถูกจัดการโดยคอมโพเนนต์เอง (การโหลดการเพิ่มการจัดการความคิดเห็น)
ฉันชอบสถาปัตยกรรมFluxมากเพราะมันทำให้หลาย ๆ อย่างง่ายขึ้นมากและร้านค้าก็เหมาะสำหรับการแชร์สถานะระหว่างเซิร์ฟเวอร์และไคลเอนต์ เมื่อเริ่มต้นร้านค้าของฉันที่มีความคิดเห็นแล้วฉันก็สามารถทำให้เป็นซีเรียลไลซ์และส่งจากเซิร์ฟเวอร์ไปยังไคลเอนต์ซึ่งเรียกคืนได้อย่างง่ายดาย
คำถามคือวิธีใดเป็นวิธีที่ดีที่สุดในการเติมข้อมูลร้านค้าของฉัน ในช่วงหลายวันที่ผ่านมาฉัน Googling มากและฉันเจอกลยุทธ์บางอย่างซึ่งดูเหมือนจะไม่ดีเลยเมื่อพิจารณาว่าคุณสมบัติของ React นี้ได้รับการ "โปรโมต" มากแค่ไหน
ในความคิดของฉันวิธีที่ง่ายที่สุดคือเติมข้อมูลร้านค้าทั้งหมดของฉันก่อนที่การแสดงผลจริงจะเริ่มขึ้น นั่นหมายถึงบางแห่งที่อยู่นอกลำดับชั้นของส่วนประกอบ (เช่นต่อกับเราเตอร์ของฉัน) ปัญหาของวิธีนี้คือฉันจะต้องกำหนดโครงสร้างหน้าสองครั้ง พิจารณาหน้าเว็บที่ซับซ้อนมากขึ้นตัวอย่างเช่นหน้าบล็อกที่มีส่วนประกอบต่างๆมากมาย (โพสต์ในบล็อกจริงความคิดเห็นโพสต์ที่เกี่ยวข้องโพสต์ใหม่ล่าสุดกระแส Twitter ... ) ฉันจะต้องออกแบบโครงสร้างเพจโดยใช้ส่วนประกอบ React จากนั้นที่อื่นฉันจะต้องกำหนดขั้นตอนการเติมข้อมูลแต่ละร้านที่ต้องการสำหรับเพจปัจจุบันนี้ ดูเหมือนจะไม่ใช่ทางออกที่ดีสำหรับฉัน น่าเสียดายที่แบบฝึกหัด isomorphic ส่วนใหญ่ได้รับการออกแบบด้วยวิธีนี้ (เช่นการสอนเกี่ยวกับฟลักซ์ที่ยอดเยี่ยมนี้)
ตอบสนอง-async แนวทางนี้เหมาะอย่างยิ่ง ช่วยให้ฉันกำหนดฟังก์ชันพิเศษในแต่ละองค์ประกอบว่าจะเริ่มต้นสถานะอย่างไร (ไม่สำคัญว่าจะซิงโครนัสหรืออะซิงโครนัส) และฟังก์ชันเหล่านี้เรียกว่าลำดับชั้นกำลังแสดงผลเป็น HTML มันทำงานในลักษณะที่ส่วนประกอบจะไม่แสดงผลจนกว่าสถานะจะเริ่มต้นอย่างสมบูรณ์ ปัญหาคือมันต้องใช้Fibersซึ่งเท่าที่ฉันเข้าใจส่วนขยาย Node.js ที่เปลี่ยนแปลงพฤติกรรม JavaScript มาตรฐาน แม้ว่าฉันจะชอบผลลัพธ์มาก แต่ก็ยังดูเหมือนว่าสำหรับฉันแทนที่จะหาวิธีแก้ปัญหาเราเปลี่ยนกฎของเกม และฉันคิดว่าเราไม่ควรถูกบังคับให้ทำเช่นนั้นเพื่อใช้คุณสมบัติหลักของ React.js ฉันยังไม่แน่ใจเกี่ยวกับการสนับสนุนทั่วไปของโซลูชันนี้ เป็นไปได้ไหมที่จะใช้ Fiber บนเว็บโฮสติ้ง Node.js มาตรฐาน
ฉันกำลังคิดเล็กน้อยด้วยตัวเอง ฉันไม่ได้คิดถึงรายละเอียดการใช้งานจริง ๆ แต่แนวคิดทั่วไปคือฉันจะขยายส่วนประกอบในลักษณะเดียวกันกับ React-async จากนั้นฉันจะเรียก React.renderComponentToString () ซ้ำ ๆ บนองค์ประกอบราก ในแต่ละรอบฉันจะรวบรวมการโทรกลับที่ขยายออกแล้วโทรหาพวกเขาที่และของบัตรเพื่อเติมข้อมูลร้านค้า ฉันจะทำขั้นตอนนี้ซ้ำจนกว่าร้านค้าทั้งหมดที่ต้องการตามลำดับชั้นของส่วนประกอบปัจจุบันจะถูกเติม มีหลายสิ่งที่ต้องแก้ไขและฉันไม่แน่ใจเป็นพิเศษเกี่ยวกับประสิทธิภาพ
ฉันพลาดอะไรไปหรือเปล่า? มีแนวทาง / แนวทางแก้ไขอื่นหรือไม่? ตอนนี้ฉันกำลังคิดที่จะใช้วิธี react-async / fibre แต่ฉันไม่แน่ใจอย่างสมบูรณ์ตามที่อธิบายไว้ในจุดที่สอง
การอภิปรายที่เกี่ยวข้องบน GitHub เห็นได้ชัดว่าไม่มีแนวทางอย่างเป็นทางการหรือแม้แต่วิธีแก้ปัญหา อาจจะเป็นคำถามที่แท้จริงว่าส่วนประกอบของ React มีไว้เพื่อใช้งานอย่างไร เช่นเดียวกับเลเยอร์มุมมองที่เรียบง่าย (ข้อเสนอแนะของฉันอันดับหนึ่ง) หรือชอบส่วนประกอบอิสระและแบบสแตนด์อโลนที่แท้จริง?