diff --git a/change/react-native-xaml-e5f739e7-398e-4d89-8d72-0c3559c990cb.json b/change/react-native-xaml-e5f739e7-398e-4d89-8d72-0c3559c990cb.json new file mode 100644 index 0000000..f91c0a1 --- /dev/null +++ b/change/react-native-xaml-e5f739e7-398e-4d89-8d72-0c3559c990cb.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Fix event setup codepath", + "packageName": "react-native-xaml", + "email": "asklar@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/package/windows/ReactNativeXaml/XamlMetadata.cpp b/package/windows/ReactNativeXaml/XamlMetadata.cpp index 8f1a7fa..6266295 100644 --- a/package/windows/ReactNativeXaml/XamlMetadata.cpp +++ b/package/windows/ReactNativeXaml/XamlMetadata.cpp @@ -30,13 +30,12 @@ using namespace winrt::Microsoft::ReactNative; #define MAKE_GET_DP(type, prop) IsType, []() { return type::prop(); } void XamlMetadata::SetupEventDispatcher(const IReactContext& reactContext) { - m_reactContext = reactContext; - std::once_flag inited; - std::call_once(inited, [ctx = reactContext, this]() { - ExecuteJsi(ctx, [shared = shared_from_this()](facebook::jsi::Runtime& rt) { + if (!m_reactContext) { + m_reactContext = reactContext; + } - auto obj = rt.global().createFromHostObject(rt, std::make_shared()); - rt.global().setProperty(rt, jsi::PropNameID::forAscii(rt, "xaml"), obj); + if (!m_receiveEvent.has_value()) { + ExecuteJsi(m_reactContext, [shared = shared_from_this()](facebook::jsi::Runtime& rt) { auto batchedBridge = rt.global().getProperty(rt, "__fbBatchedBridge"); if (!batchedBridge.isUndefined() && batchedBridge.isObject()) { if (auto vm = shared.get()) { @@ -46,7 +45,7 @@ void XamlMetadata::SetupEventDispatcher(const IReactContext& reactContext) { } } }); - }); + } } FrameworkElement Wrap(const winrt::Windows::Foundation::IInspectable& d) {