Optimize componentAtIndex
by a few hundreds microseconds: avoiding manipulate __pendingListUpdates
unless SnapshotInstance tree is changed (#1201)
Support alog of component rendering on production for better error reporting. Enable it by using REACT_ALOG=true rspeedy dev/build
or defining __ALOG__
to true
in lynx.config.js
: (#1164)
Make preact/debug
work with @lynx-js/react
. (#1222)
Introduce @lynx-js/react/debug
which would include debugging warnings and error messages for common mistakes found. (#1250)
Add the import to @lynx-js/react/debug
at the first line of the entry:
<list-item/>
deferred now accepts an object with unmountRecycled
property to control unmounting behavior when the item is recycled. (#1302)
For example, you can use it like this:
Now the component will be unmounted when it is recycled, which can help with performance in certain scenarios.
Avoid some unexpected __SetAttribute
in hydrate when undefined
is passed as an attribute value to intrinsic elements, for example: (#1318)
renderPage
in preact act
to ensure that the effects are flushed. (#1170)Allow some <list-item/>
s to be deferred and rendered in the background thread. (#204)
Use the following syntax:
You should render your heavyweight components with the defer
attribute to avoid blocking the main thread.
Add missing alias of @lynx-js/react
and preact
in testing library, it will fix the Failed to resolve import "@lynx-js/react/internal"
error in node_modules. (#1182)
Allow any types of dataProcessors
in lynx.registerDataProcessors
. (#1200)
Make loadLazyBundle
being able to render the content on the first screen of the background thread. (#1212)
Fixed: An issue where the lynxViewDidUpdate
callback did not trigger when data was updated from native. (#1171)
Notice:
updateData()
, the lynxViewDidUpdate
callback will still be triggered.lynxViewDidUpdate
callback will be triggered per render cycle. Consequently, if multiple updateData()
calls are made within a single cycle but the data updates are batched, the number of lynxViewDidUpdate
callbacks triggered may be less than the number of updateData()
calls.Supports act
in testing library. (#1182)
<list/>
. (#1144)Fixed closure variable capture issue in effect hooks to prevent stale values and ensured proper execution order between refs, effects, and event handlers. (#770)
Breaking Changes:
ref
, useEffect()
callback, componentDidMount
, componentDidUpdate
, componentWillUnmount
and the callback of setState
have been moved forward. These effects will now execute before hydration is complete, rather than waiting for the main thread update to complete.<list />
, ref
callbacks will now be triggered during background thread rendering, regardless of component visibility. If your code depends on component visibility timing, use main-thread:ref
instead of regular ref
.Fixed two memory leaks: (#1071)
When JSX is rendered on the main thread and removed, FiberElement can still be referenced by __root.__jsx
through props.children
;
When the SnapshotInstance tree is removed from the root node, its child nodes form a cycle reference because the __previousSibling
and __nextSibling
properties point to each other, thus causing a FiberElement leak.
Optimize the error message when snapshots cannot be found in the main thread. (#1083)
Fix a problem causing MainThreadRef
s to not be updated correctly during hydration when they are set to main-thread:ref
s. (#1001)
Add snapshot id report when throwing snapshotPatchApply failed: ctx not found
error. (#1107)
Fix a bug in ReactLynx Testing Library that rendered snapshot of inline style was normalized incorrectly (eg. flex:1
was normalized to flex: 1 1 0%;
incorrectly). (#1040)
Support for locating errors in the source code directly on the device when exceptions occur when using MTS. (#1019)
This requires Lynx engine v3.4 or later.
Fix the "main-thread.js exception: ReferenceError: __webpack_require__
is not defined" error in HMR. (#985)
This error occurred when setting output.iife: true
, which is the default value in @lynx-js/rspeedy
v0.9.8.
Support the 'main-thread' directive as an alias for 'main thread'. (#970)
Reduce calls to __AddInlineStyle
by pass non-literal object directly to __SetInlineStyles
. (#941)
Fix type error when using Suspense
with "jsx": "react-jsx"
. (#854)
Support lazy bundle in ReactLynx testing library. (#869)
Fix a bug in HMR that snapshots are always updated because the same unique ID check is not performed correctly. (#869)
Fix missing types of key
on components when using "jsx": "react-jsx"
. (#872)
Reverts #239: "batch multiple patches for main thread communication" (#649)
This reverts the change that batched updates sent to the main thread in a single render pass.
Add support for batch rendering in <list>
with async resolution of sub-tree properties and element trees. (#624)
Use the experimental-batch-render-strategy
attribute of <list>
:
rename @lynx-js/test-environment to @lynx-js/testing-environment (#704)
Auto import @lynx-js/react/experimental/lazy/import
when using import(url)
(#667)
Auto import @lynx-js/react/experimental/lazy/import
when using <component is={url} />
(#666)
Fixed a race condition when updating states and GlobalProps simultaneously. (#707)
This fix prevents the "Attempt to render more than one <page />
" error from occurring during normal application usage.
Fix error like Unterminated string constant
when using multi-line JSX StringLiteral. (#654)
OnPipelineStart arg count must == 1
on app load. (#669)Some of the timing keys are renamed to match the naming convention of the Lynx Engine. (#438)
update_set_state_trigger
-> updateSetStateTrigger
update_diff_vdom_start
-> updateDiffVdomStart
update_diff_vdom_end
-> updateDiffVdomEnd
diff_vdom_start
-> diffVdomStart
diff_vdom_end
-> diffVdomEnd
pack_changes_start
-> packChangesStart
pack_changes_end
-> packChangesEnd
parse_changes_start
-> parseChangesStart
parse_changes_end
-> parseChangesEnd
patch_changes_start
-> patchChangesStart
patch_changes_end
-> patchChangesEnd
hydrate_parse_snapshot_start
-> hydrateParseSnapshotStart
hydrate_parse_snapshot_end
-> hydrateParseSnapshotEnd
mts_render_start
-> mtsRenderStart
mts_render_end
-> mtsRenderEnd
Add testing library for ReactLynx (#74)
Refactor: Improved naming for list operation related types. Renamed UpdateAction
interface to ListOperations
. (#592)
Support using "jsx": "react-jsx"
along with "jsxImportSource": "@lynx-js/react"
in tsconfig.json
. (#545)
This configuration enhances TypeScript definitions for standard JSX elements,
providing type errors for unsupported elements like <div>
or <button>
.
fix: JSX elements with dynamic key={expr}
now wrapped in wrapper
element to prevent merging. (#547)
Fix lynx.loadLazyBundle
is not a function (#568)
fix: flushDelayedLifecycleEvents stack overflow error (#540)
Do some global var initialize in hydrate, which fixes error like cannot read property '-21' of undefined
and some style issue. (#461)
fix: ensure ref lifecycle events run after firstScreen in the background thread (#434)
This patch fixes an issue where ref lifecycle events were running before firstScreen events in the background thread async render mode, which could cause refs to be undefined when components try to access them.
fix: prevent multiple firstScreen events when reloading before jsReady
(#377)
Optimize the bundle size by eliminating unnecessary code when the lazy bundle is not utilized. (#284)
Improved rendering performance by batching updates sent to the main thread in a single render pass. This optimization reduces redundant layout operations on the main thread, accelerates rendering, and prevents screen flickering. (#239)
BREAKING CHANGE: This commit changes the behavior of Timing API. Previously, timing events were fired for each update individually. With the new batching mechanism, timing events related to the rendering pipeline will now be triggered once per render cycle rather than for each individual update, affecting applications that rely on the previous timing behavior.
Add missing typing for useErrorBoundary
. (#263)
You can now use useErrorBoundary
it in TypeScript like this:
Modified the format of data sent from background threads to the main thread. (#207)
Support Lynx SSR. (#60)
Support new css properties: offset-path
and offset-distance
(#152)
Fix 'SystemInfo is not defined' error when using MTS and not importing anything manually from the react package. (#172)
Fix not a function
error when using lazy bundle without MTS. (#170)
fix: gesture config not processed correctly (#175)
After this commit, gesture config like minDistance
should work as expected.
Support NPM provenance. (#30)
feat: add compiler only version of addComponentElement, it does not support spread props but have no runtime overhead, use it by: (#15)
Fix error createRef is not a function
(#16)
Support MIXED
target for worklet, it will be used by unit testing frameworks, etc. (#27)
Support return value for runOnBackground()
and runOnMainThread()
. (#119)
Now you can get the return value from runOnBackground()
and runOnMainThread()
, which enables more flexible data flow between the main thread and the background thread.
1abf8f0: Support estimated-main-axis-size-px
NOTE: This changes behavior of transformReactLynx
so certain features (like lazy bundle) will be BROKEN if version mismatch.
1abf8f0: Support JSXSpread on <list-item/>
component.
NOTE: This changes behavior of transformReactLynx
so certain features (like lazy bundle) will be BROKEN if version mismatch.
<page/>
is not used.9ce9ec0: Fix argument cannot be accessed correctly in default exported MTS functions.
99a4de6: Change TypeScript configuration to improve tree-shaking by setting verbatimModuleSyntax: false
.
This change allows the bundler to properly remove unused imports and type-only imports, resulting in smaller bundle sizes. For example:
See TypeScript - verbatimModuleSyntax for details.
createRoot
cannot find module './snapshot/event.js'
error avoid tree-shaking event.js
in development.compat
in transform to false
__MAIN_THREAD__
and __BACKGROUND__
macro as an alternative to __LEPUS__
and __JS__
.4e94846: Fix variables being renamed in MTS.
297c6ea: Fix the issue that when runOnBackground()
's parameter is not legal, it will still report an error in the rendering process of the background thread even though it won't actually be called.
763ad4e: Stop reporting ctx id in the ctx not found
error.
480611d: Avoid error from changing theme.
3bf5830: Avoid overriding processEvalResult
.
useLynxGlobalEventListener
to make useInitData
addListener as early as possible. This will fix the issue that onDataChanged
has been called before the event listener is added.@lynx-js/types
.a30c83d: Add compat.removeComponentAttrRegex
.
NOTE: This feature is deprecated and will be removed in the future. Use codemod instead.
5f8d492: Deprecate compat.simplifyCtorLikeReactLynx2
ca3a639: Fix cssId
collision issue when hash generated @jsxCSSId
for jsx snapshot hit the range of auto increased cssId of @file
.
8fbea78: Fix 'main thread' and 'background only' directives not working in export default declarations.
ff18049: Bump swc_core v0.109.2.
This would add /*#__PURE__*/
to the output of TypeScript enum
. See swc-project/swc#9558 for details.
background.js
.6730c58: Change the snapshot transform result by adding cssId
and entryName
.
Remove Scoped CSS(Default) | Scoped CSS |
---|---|
|
|
This requires @lynx-js/react-rsbuild-plugin
v0.5.1 to work.
efbb7d4: Support Gesture.
Gesture Handler is a set of gesture handling capabilities built on top of the Main Thread Script. It currently supports drag, inertial scrolling, long press, and tap gestures for <view>
, <scroll-view>
, <list>
, and <text>
. In the future, it will also support multi-finger zoom, multi-finger rotation, and other gesture capabilities.
b2032eb: Better DCE.
Now DCE can remove dead branch:
45edafa: Support using import()
with variables.
@lynx-js/react
v0.100.0ReloadTemplate
.