mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
ed36e896ac
Summary: We're trying to pass `jsi::Value`s directly to our view components (and convert them to java/swift types manually). That way we can pass "complex" objects to our views (such as `jsi::Object`s with `NativeState` attached, without the need to convert them to e.g. `folly::dynamic`). On android we store our complex prop values on the `StateWrapperImpl` to pass the complex types between c++ and java/kotlin. See an example here: https://github.com/hannojg/nitro/blob/2378fe7754294c496b2cbcd62f7109529e276427/packages/react-native-nitro-image/nitrogen/generated/android/c%2B%2B/JValueFromStateWrapper.cpp#L21-L23 ``` const auto& customStateData = dynamic_cast<const ConcreteState<CustomStateData>&>(state); CustomStateData data = customStateData.getData(); std::shared_ptr<HybridTestObjectSwiftKotlinSpec> nativeProp = data.nativeProp; ``` > (And then it might be used in java like this:) https://github.com/hannojg/nitro/blob/2378fe7754294c496b2cbcd62f7109529e276427/packages/react-native-nitro-image/android/src/main/java/com/margelo/nitro/image/NitroExampleViewManager.java#L31-L38 ```kotlin public Object updateState(NonNull View view, ReactStylesDiffMap props, StateWrapper stateWrapper) { StateWrapperImpl stateWrapperImpl = (StateWrapperImpl) stateWrapper; HybridTestObjectSwiftKotlinSpec nativeProp = ValueFromStateWrapper.valueFromStateWrapper(stateWrapperImpl); long value = nativeProp.getBigintValue(); Log.d("NitroExampleViewManager", "Value from state: " + value); ``` For that we need to be able to access the underlying state, which is what we added in this PR. ## Changelog: <!-- Help reviewers and the release process by writing your own changelog entry. Pick one each for the category and type tags: [ANDROID|GENERAL|IOS|INTERNAL] [BREAKING|ADDED|CHANGED|DEPRECATED|REMOVED|FIXED|SECURITY] - Message For more details, see: https://reactnative.dev/contributing/changelogs-in-pull-requests --> [ANDROID] [ADDED] - Added `getState` method for `StateWrapperImpl` Pull Request resolved: https://github.com/facebook/react-native/pull/48255 Test Plan: Internal change, just make sure all tests are passing Reviewed By: cipolleschi Differential Revision: D67196130 Pulled By: javache fbshipit-source-id: 7da74bcddef79abd3122baaad1bfce30330ecc80