Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Depends on #859 replace-testing-libraries, that depends on #846 React 19 new APIs
Since React 19, useState has changed (facebook/react#31578), (facebook/react#31587) (facebook/react#31598)
Example with current useState:
setState's arity is 1 ->
setState(function (param) { return 22; })https://melange.re/unstable/playground/?language=Reason&code=bW9kdWxlIEdyZWV0aW5nID0gewogIFtAcmVhY3QuY29tcG9uZW50XQogIGxldCBtYWtlID0gKCkgPT4gewogICAgbGV0IChzdGF0ZSwgc2V0U3RhdGUpID0gUmVhY3QudXNlU3RhdGUoKCkgPT4gMzMpOwogICAgbGV0IG9uQ2xpY2sgPSBfID0%2BIHsKICAgICAgc2V0U3RhdGUoXyA9PiAyMik7CiAgICB9OwogICAgPGJ1dHRvbiBvbkNsaWNrPgogICAgICB7UmVhY3Quc3RyaW5nKCJIZWxsbyEiICsrIEludC50b19zdHJpbmcoc3RhdGUpKX0KICAgIDwvYnV0dG9uPjsKICB9Owp9OwoKbGV0IGVsZW1lbnQgPSBSZWFjdERPTS5xdWVyeVNlbGVjdG9yKCIjcHJldmlldyIpOwoKbGV0ICgpID0KICBzd2l0Y2ggKGVsZW1lbnQpIHsKICB8IFNvbWUoZWxlbWVudCkgPT4KICAgIGxldCByb290ID0gUmVhY3RET00uQ2xpZW50LmNyZWF0ZVJvb3QoZWxlbWVudCk7CiAgICBSZWFjdERPTS5DbGllbnQucmVuZGVyKHJvb3QsIDxHcmVldGluZyAvPik7CiAgfCBOb25lID0%2BCiAgICBKcy5Db25zb2xlLmVycm9yKAogICAgICAiRmFpbGVkIHRvIHN0YXJ0IFJlYWN0OiBjb3VsZG4ndCBmaW5kIHRoZSAjcHJldmlldyBlbGVtZW50IiwKICAgICkKICB9Owo%3D&live=off
In React 19 (TBD link) setState arity is 2 balblaba
The easier to fix is to ensure we apply uncurry manually to the binding and have a breaking change:
https://melange.re/unstable/playground/?language=Reason&code=W0BtZWwubW9kdWxlICJyZWFjdCJdCmV4dGVybmFsIHVzZVN0YXRlOgogIChbQG1lbC51bmN1cnJ5XSAodW5pdCA9PiAnc3RhdGUpKSA9PiAoJ3N0YXRlLCAoLiAoJ3N0YXRlID0%2BICdzdGF0ZSkpID0%2BIHVuaXQpID0KICAidXNlU3RhdGUiOwoKbW9kdWxlIEdyZWV0aW5nID0gewogIFtAcmVhY3QuY29tcG9uZW50XQogIGxldCBtYWtlID0gKCkgPT4gewogICAgbGV0IChzdGF0ZSwgc2V0U3RhdGUpID0gdXNlU3RhdGUoKCkgPT4gMzMpOwogICAgbGV0IG9uQ2xpY2sgPSBfID0%2BIHsKICAgICAgc2V0U3RhdGUoLiBfID0%2BIDIyKTsKICAgIH07CiAgICA8YnV0dG9uIG9uQ2xpY2s%2BCiAgICAgIHtSZWFjdC5zdHJpbmcoIkhlbGxvISIgKysgSW50LnRvX3N0cmluZyhzdGF0ZSkpfQogICAgPC9idXR0b24%2BOwogIH07Cn07CgpsZXQgZWxlbWVudCA9IFJlYWN0RE9NLnF1ZXJ5U2VsZWN0b3IoIiNwcmV2aWV3Iik7CgpsZXQgKCkgPQogIHN3aXRjaCAoZWxlbWVudCkgewogIHwgU29tZShlbGVtZW50KSA9PgogICAgbGV0IHJvb3QgPSBSZWFjdERPTS5DbGllbnQuY3JlYXRlUm9vdChlbGVtZW50KTsKICAgIFJlYWN0RE9NLkNsaWVudC5yZW5kZXIocm9vdCwgPEdyZWV0aW5nIC8%2BKTsKICB8IE5vbmUgPT4KICAgIEpzLkNvbnNvbGUuZXJyb3IoCiAgICAgICJGYWlsZWQgdG8gc3RhcnQgUmVhY3Q6IGNvdWxkbid0IGZpbmQgdGhlICNwcmV2aWV3IGVsZW1lbnQiLAogICAgKQogIH07Cg%3D%3D&live=off
To not have a breaking change, we probably need to bring some runtime (similar to #698):
This would re-create a new setState function each component render, so it's a good idea to wrap it with
React.useCallback1to ensureObject.is(setState, setState)bails out from this behaviour