Tags:
- π₯ [Breaking Change]
- π [Spec Compliance]
- π [New Feature]
- π [Bug Fix]
- π [Documentation]
- π [Internal]
- π [Polish]
- Bindings for React 19.2 APIs. #149
- Bindings for React 19.1 API (
captureOwnerStack). #146
- Keep
useTransitionbackward compatibility and addstartTransition. #142
- Bindings for new React 19 APIs. #133
- Bumped React peer dependency to 19.0. #139
- Removed legacy JSX v3 modules and deprecated functions. #129
- Removed support for curried mode. #131
- ReScriptReactRouter: get rid of pipe last. #126
- Replace usages of
%externalby binding toglobalThis. This is to support upcoming ReScript 12 versions. For older browsers, it may be necessary to polyfillglobalThis.
- Remove hardcoded
requireso it works in both common js and ES module modes. (#117)
- Fix incorrect usage of
@uncurry. - bsconfig.json -> rescript.json.
- Undeprecate numbered hooks for a smoother upgrading experience.
- Requires ReScript 11.0.0 or newer.
- Deprecated use*N functions in favor of changing the signature of the main hook function.
- For example, useEffect instead of useEffectN e.g.
useEffect3(f, (a, b, c))->useEffect(f, (a, b, c)) - The affected hooks include
useEffect,useLayoutEffect,useCallback,useMemo,useImperativeHandle,useInsertionEffect - With this change, it is now possible to pass any value as the second argument
'deps. In case you pass an invalid value, you will get a warning from React at runtime. You should be using one of the following values for the dependency array:- 0 dependencies:
[] - 1 dependency:
[a] - more than 1 dependency:
(a, b, ...)
- 0 dependencies:
- For example, useEffect instead of useEffectN e.g.
- For calling
useEffect,useLayoutEffectetc. without a dependency array (meaning that the effect is executed on every render), there are now separate bindingsuseEffectOnEveryRender,useLayoutEffectOnEveryRenderetc.
- Added
React.lazy_.
- Requires ReScript 11.0.0-alpha.6 or newer.
- Fixed children type for
Fragment,StrictModeandSuspense.
- Removed experimental
SuspenseListcomponent.
- Compatibility with ReScript 11 uncurried mode.
- Added
gapprop toReactDOMStyle.make.
- Removed
React.callbacktype.
- Updated
React_V3compatibility module to define record fieldcurrentforref.
No changes compared to rc.3.
- Changed
React.jsxKeyed(s),ReactDOM.jsxKeyed(s)having key as optional argument. - Changed
React.fragmentPropschildren field to optional. - Removed the helper functions for JSX v4 from
React.res. - Made
React.componentconversion function zero cost.
- Fixed JSX PPX V3 backward compatibility.
- Added React 18 bindings.
- Added binding for
React.isValidElement. - Added backgroundFilter prop in
ReactDOMStyle. - Relaxed React version requirement to v18.0.0+.
ReactDOM.domPropsis now an alias forJsxDOM.domProps(defined in the compiler repo)- Deprecated types
ReactDOM.props,ReactDOM.Props.props,ReactDOM.Props.domProps. - Deprecated
ReactDOM.stringToComponent.
RescriptReactErrorBoundarycomponent now implemented using@react.component, so it is compatible with JSX V4.ReactV3module added for backward compatibility to JSX V3. See the V3 compatibility mode- Fixed
react-dom/serverandreact-dom/test-utilsimports. - Fixed
createRootbindings. - Added
Keyboard.codebinding. - Renamed
Changes.mdtoCHANGELOG.mdto align with the rescript-compiler repo.
Breaking:
-
IMPORTANT The
Reactmodule has been modified in a breaking way to support the new JSX PPX V4. -
Removed the deprecation attribute from apis of the new jsx transform (introduced in React v17).
-
New version requirements:
- ReScript compiler V10.1+
- ReactJS v18.2.0+
- Temporarily remove peerDependency for bs-platform, so we can gracefully do the transition to our new
rescriptpackage
- Added
.jsextension to externals to comply to ES6 module conventions - Bump peerDependencies versions
This is the initial version of rescript-react, a port of reason-react@0.9 that will be almost equivalent, except for a few long needed minor breaking changes.
It is intended to be used with our newest ReScript React-JSX transformations (> JSX v3) and React v16.8.
For history on previous evolution of the code, check out the original reason-react history
Breaking:
-
IMPORTANT: Currently, old third-party packages that are still dependent on
reason-reactwill not mix with other@rescript/reactbased code due to a build system problem. Which means that every third-party dependency needs to be upgraded to@rescript/reactfirst to make it compatible. See this forum discussion for more details. -
Removed legacy modules ("record api"):
ReasonReactCompatReactDOMServerReReactEventReReasonReactOptimizedCreateClass
-
Renamed existing modules:
ReasonReactErrorBoundary->RescriptReactErrorBoundaryReasonReactRouter->RescriptReactRouter- (Note: Usually the two only valid styles would be
ReScriptorrescript, the latter being the version for technical writing. We are usingRescripthere, since it is essentially the capitalized version ofrescript)
-
Removed all functionality from
ReasonReactandReactDOMRethat is not needed for react-jsx v3 compatibility -
Moved
React.SuspenseListtoReact.Experimental.SuspenseListto be more consistent with our Experimental features
Misc:
- Renamed
HISTORY.mdtoChanges.md(aligning with other core projects, like genType)