Native Module vs. Turbo Module
Architekturbewertung erforderlich: Diese Dokumentation wurde zur Unterstützung der Entwicklung gegen die "alte" oder "Legacy"-Architektur von React Native geschrieben. Sie ist möglicherweise nicht direkt auf die Entwicklung mit der neuen Architektur anwendbar und muss überprüft und möglicherweise aktualisiert werden. Informationen zu React Native-Architekturen in React Native Windows finden Sie unter Neu vs. Alt Architektur.
Die neuesten Informationen zur nativen Entwicklung unter Windows finden Sie unter Native Plattform: Übersicht.
Wenn Sie mit React Native gearbeitet haben, sind Sie möglicherweise mit dem Konzept von Native Modules vertraut, die die Kommunikation zwischen JavaScript und plattformspezifischem nativen Code über die React Native "Bridge" ermöglichen, die die plattformübergreifende Serialisierung über JSON abwickelt.
TurboModules sind die nächste Iteration von Native Modules, die einige zusätzliche Vorteile bieten. Insbesondere verwenden diese Module JSI, eine JavaScript-Schnittstelle für nativen Code, die eine effizientere Kommunikation zwischen nativem und JavaScript-Code als die Bridge ermöglicht.
Migration zu TurboModules
Module, die als TurboModules ausgeführt werden, sind in JS über TurboModuleRegistry.get('<modulename>') anstelle von NativeModules.<modulename> verfügbar. Daher muss Ihr JavaScript vor dem Wechsel aktualisiert werden. Idealerweise sollten Sie Ihre Module auf die Verwendung von Spec-Dateien umstellen. Dies macht Ihre Module mit Codegen kompatibel.
Hinweis:
TurboModuleRegistrygibt stattdessen ein natives Modul zurück, wenn ein natives Modul aus dem nativen Code registriert ist. Sie können also Ihr JavaScript aktualisieren, bevor Sie Ihren nativen Code aktualisieren.
Ab Version 0.71 können JS/TS Spec-Dateien C++ Spec-Dateien generieren, die überprüfen können, ob die native Implementierung mit der Definition in JS übereinstimmt. Außerdem können Module jetzt als TurboModules anstelle von Native Modules ausgeführt werden, indem einfach ein zusätzlicher Parameter zu Ihrem Aufruf von AddAttributedModules hinzugefügt wird.
AddAttributedModules(packageBuilder, true);
Wenn Sie Module manueller registrieren, indem Sie IReactPackageBuilder.AddModule aufrufen, können Sie stattdessen IReactPackageBuilder.AddTurboModule aufrufen.
Weitere Unterschiede zwischen Native Module und TurboModule
Nachdem Sie eine Spec in JS erstellt haben, sollten Sie JS-Typprüfer sehen, die darauf hinweisen, dass Konstanten über MyModule.getConstants().myconst anstelle von MyModule.myconst abgerufen werden sollten. Wenn Sie die Zugriffe auf myconst nicht aktualisieren, funktioniert das Feld weiterhin, wenn das Modul als Native Module ausgeführt wird, da Native Modules alle Konstanten zu Feldern auf dem Modul hochstufen. Dieses Verhalten tritt bei TurboModules nicht auf, sodass das Feld myconst undefiniert ist. Aufrufe mit getConstants().myconst funktionieren sowohl für Native Modules als auch für TurboModules.
Web Debugging Verhalten
TurboModules können bei der Verwendung von Remote Debugging / Web Debugging nicht ausgeführt werden. React-Native-Windows versucht, ein TurboModule als natives Modul auszuführen, wenn es in diesem Modus ausgeführt wird. Wenn das Modul jedoch direkt JSI verwendet, funktioniert dieser Fallback möglicherweise nicht.