Skip to content

Commit

Permalink
Fabric: Use std::move on callback in Element::stateData (#29897)
Browse files Browse the repository at this point in the history
Summary:
This pull request adds a call to `std::move` on the lambda capture in `Element::stateData`.

On Windows/Visual Studio 2017, this fixes a failure in the test `LayoutableShadowNodeTest.contentOriginOffset` where the error `std::bad_function_call` was being thrown. This was narrowed down to the callback being empty when called in `Element::stateData`.

https://github.com/facebook/react-native/blob/7e899348c74238a4a042380f86a8fe0d7e05511b/ReactCommon/react/renderer/element/Element.h#L98

Making sure the callback survives with `std::move` allows that test to pass under Windows.

## Changelog

Changelog: [Internal][Changed] - Fabric: Use std::move on callback in Element::stateData

Pull Request resolved: #29897

Test Plan: The Fabric test suite passes on Windows after this change is made. I also tested it under macOS and Linux built with Clang and they both pass with this change made.

Reviewed By: sammy-SC

Differential Revision: D23591969

Pulled By: shergin

fbshipit-source-id: e5c88bb0e94641e5128c4d49dd2f9dbfa49e9cfa
  • Loading branch information
empyrical authored and facebook-github-bot committed Sep 10, 2020
1 parent eafa49d commit c7ec600
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion ReactCommon/react/renderer/element/Element.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,8 @@ class Element final {
* Sets `state` using callback.
*/
Element &stateData(std::function<void(ConcreteStateData &)> callback) {
fragment_.stateCallback = [&]() -> StateData::Shared {
fragment_.stateCallback = [callback =
std::move(callback)]() -> StateData::Shared {
auto stateData = ConcreteStateData();
callback(stateData);
return std::make_shared<ConcreteStateData>(stateData);
Expand Down

0 comments on commit c7ec600

Please sign in to comment.