diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/StateWrapperImpl.cpp b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/StateWrapperImpl.cpp index 9a5b929e9af..c95ac15bc2e 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/StateWrapperImpl.cpp +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/StateWrapperImpl.cpp @@ -23,17 +23,24 @@ jni::local_ref StateWrapperImpl::initHybrid( } jni::local_ref StateWrapperImpl::getState() { - folly::dynamic map = state_->getDynamic(); + auto state = state_.lock(); + if (!state) { + return nullptr; + } + folly::dynamic map = state->getDynamic(); local_ref readableNativeMap = ReadableNativeMap::newObjectCxxArgs(map); return readableNativeMap; } void StateWrapperImpl::updateStateImpl(NativeMap *map) { - // Get folly::dynamic from map - auto dynamicMap = map->consume(); - // Set state - state_->updateState(dynamicMap); + auto state = state_.lock(); + if (state) { + // Get folly::dynamic from map + auto dynamicMap = map->consume(); + // Set state + state->updateState(dynamicMap); + } } void StateWrapperImpl::registerNatives() { diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/StateWrapperImpl.h b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/StateWrapperImpl.h index 9a88eb0271b..dccd52155b3 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/StateWrapperImpl.h +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/StateWrapperImpl.h @@ -32,7 +32,7 @@ class StateWrapperImpl : public jni::HybridClass { jni::alias_ref self, int callbackRefId); - State::Shared state_; + State::Weak state_; private: jni::alias_ref jhybridobject_; diff --git a/ReactCommon/react/renderer/core/State.h b/ReactCommon/react/renderer/core/State.h index c0472fec057..285691fe94a 100644 --- a/ReactCommon/react/renderer/core/State.h +++ b/ReactCommon/react/renderer/core/State.h @@ -24,6 +24,7 @@ namespace react { class State { public: using Shared = std::shared_ptr; + using Weak = std::weak_ptr; static size_t constexpr initialRevisionValue = 1;