3.0.0
Please refer to CHANGELOG.md for details.
v4.0.1
- 修复媒体渲染中的 XSS 漏洞
修复缺陷 - 升级 Mermaid 到 11.17.2
修复缺陷 - 支持关闭行内数学公式解析
引入特性 - 改进 blockquote 和 callout 样式
改进功能
Release 2026-10-17 17:53
Release 2026-10-17 17:53
- query-core: clear mutations before notifying subscribers (#11470) (1fee0443d) by @chungyo
- react-query: retry queries with falsy errors on mount (#11328) (c20886163) by @jeonghoon11
- preact-query: retry on mount for falsy errors when throwOnError returns false (#11375) (0addcd2a9) by @S-jooyoung
- solid-query: subscribe to the new observer when the queryClient changes (#11920) (7ea027855) by @taekop
- query-core: preserve null infinite page params (#11527) (fce89ddf7) by @gwagjiug
- query-devtools/Devtools: apply the 'hideDisabledQueries' prop to the query list (#11638) (b61abc203) by @sukvvon
- {preact,solid,svelte,angular-query-experimental}: switch to 'export type *' for type-only re-exports (#11251) (fc3a3848f) by @sukvvon
- query-devtools: expose pressed state on the boolean value toggle button (#11983) (c8f5eac9d) by @dmarcey
- eslint-plugin-query: detect aliased React hook dependencies (#11889) (1cf6eb4e9) by @fallintoplace
- react-query*: declare '@types/react' as an optional peer dependency (#11728) (a10839824) by @sukvvon
- examples/react: throw on non-ok 'fetch' responses in the query and mutation functions (#12058) (5817e6f69) by @sukvvon
- react-query-devtools: create the devtools instance lazily with 'useState' initializer instead of on every render (#11722) (0992a9291) by @sukvvon
- svelte-query/HydrationBoundary: make 'options' and 'queryClient' props optional (#12030) (2bb82dfd2) by @sukvvon
- preact-query: do not go into optimistic fetching state when not subscribed (#11259) (2ce51902d) by @giaBaoJS
- examples/react/nextjs-app-optimistic-updates: return the invalidation promise from 'onSettled' so the pending todo stays until the refetch finishes (#12055) (9fbf29380) by @sukvvon
- examples: rename the auto-refetching title from 'stale-time' to 'refetchInterval', which is the option it sets (#12051) (83b0831c2) by @sukvvon
- examples/react/offline: throw on non-ok responses so failures surface the server's message instead of a JSON parse error (#12050) (b71ff3169) by @sukvvon
- examples/react/chat: submit through a 'form' so 'Enter' cannot send an empty question (#12049) (6f1fa2b84) by @sukvvon
- examples/react/batching: show the character's 'status' instead of the query 'status' (#12045) (958308812) by @sukvvon
- examples/react/rick-morty: read the episode's 'air_date' instead of the nonexistent 'airDate' (#12046) (116818a61) by @sukvvon
- examples/react/chat: give each question an 'id' so repeated questions get their own React key and query (#12047) (817f823b9) by @sukvvon
- examples/react/chat: use camelCase 'strokeWidth', 'strokeLinecap' and 'strokeLinejoin' on the send icon (#12048) (8ca99d1e5) by @sukvvon
- eslint-plugin-query/exhaustive-deps: remove the unused 'fixable' from the rule metadata (#12044) (a5f1b092b) by @sukvvon
- examples/react/suspense: prefetch the projects in the click handler instead of inside the 'setShowProjects' updater (#12056) (a636462b8) by @sukvvon
- examples/react/react-router: replace the deprecated 'ensureQueryData' with 'query' and 'staleTime: 'static'' in the loaders (#12052) (584fd6414) by @sukvvon
- examples/react/react-native: pass the movie title in route params and show the cached list item as 'placeholderData' (#12037) (e75ecbedf) by @sukvvon
- *: update '@tanstack/typedoc-config' to v0.3.5 (#12035) (f38e6271b) by @sukvvon
- integrations: remove the unused legacy '.eslintrc.cjs' configs (#12040) (e90c0bdb8) by @sukvvon
- examples/react/react-native: add a flat config and run 'test:eslint' (#12039) (eb94a5b44) by @sukvvon
- oxlint.config: ignore 'examples' and 'integrations', which are not linted by Oxlint (#12038) (0e19ad7c3) by @sukvvon
- @tanstack/angular-query-experimental@5.104.4
- @tanstack/eslint-plugin-query@5.104.4
- @tanstack/lit-query@0.2.29
- @tanstack/preact-query@5.104.4
- @tanstack/preact-query-devtools@5.104.4
- @tanstack/preact-query-persist-client@5.104.4
- @tanstack/query-async-storage-persister@5.104.4
- @tanstack/query-broadcast-client-experimental@5.104.4
- @tanstack/query-core@5.104.4
- @tanstack/query-devtools@5.104.4
- @tanstack/query-persist-client-core@5.104.4
- @tanstack/query-sync-storage-persister@5.104.4
- @tanstack/react-query@5.104.4
- @tanstack/react-query-devtools@5.104.4
- @tanstack/react-query-next-experimental@5.104.4
- @tanstack/react-query-persist-client@5.104.4
- @tanstack/solid-query@5.104.4
- @tanstack/solid-query-devtools@5.104.4
- @tanstack/solid-query-persist-client@5.104.4
- @tanstack/svelte-query@6.3.4
- @tanstack/svelte-query-devtools@6.3.4
- @tanstack/svelte-query-persist-client@6.3.4
- @tanstack/vue-query@5.104.4
- @tanstack/vue-query-devtools@6.3.4
Release 2026-10-17 17:53
Release 2026-10-17 17:53
- query-core: clear mutations before notifying subscribers (#11470) (1fee0443d) by @chungyo
- react-query: retry queries with falsy errors on mount (#11328) (c20886163) by @jeonghoon11
- preact-query: retry on mount for falsy errors when throwOnError returns false (#11375) (0addcd2a9) by @S-jooyoung
- solid-query: subscribe to the new observer when the queryClient changes (#11920) (7ea027855) by @taekop
- query-core: preserve null infinite page params (#11527) (fce89ddf7) by @gwagjiug
- query-devtools/Devtools: apply the 'hideDisabledQueries' prop to the query list (#11638) (b61abc203) by @sukvvon
- {preact,solid,svelte,angular-query-experimental}: switch to 'export type *' for type-only re-exports (#11251) (fc3a3848f) by @sukvvon
- query-devtools: expose pressed state on the boolean value toggle button (#11983) (c8f5eac9d) by @dmarcey
- eslint-plugin-query: detect aliased React hook dependencies (#11889) (1cf6eb4e9) by @fallintoplace
- react-query*: declare '@types/react' as an optional peer dependency (#11728) (a10839824) by @sukvvon
- examples/react: throw on non-ok 'fetch' responses in the query and mutation functions (#12058) (5817e6f69) by @sukvvon
- react-query-devtools: create the devtools instance lazily with 'useState' initializer instead of on every render (#11722) (0992a9291) by @sukvvon
- svelte-query/HydrationBoundary: make 'options' and 'queryClient' props optional (#12030) (2bb82dfd2) by @sukvvon
- preact-query: do not go into optimistic fetching state when not subscribed (#11259) (2ce51902d) by @giaBaoJS
- examples/react/nextjs-app-optimistic-updates: return the invalidation promise from 'onSettled' so the pending todo stays until the refetch finishes (#12055) (9fbf29380) by @sukvvon
- examples: rename the auto-refetching title from 'stale-time' to 'refetchInterval', which is the option it sets (#12051) (83b0831c2) by @sukvvon
- examples/react/offline: throw on non-ok responses so failures surface the server's message instead of a JSON parse error (#12050) (b71ff3169) by @sukvvon
- examples/react/chat: submit through a 'form' so 'Enter' cannot send an empty question (#12049) (6f1fa2b84) by @sukvvon
- examples/react/batching: show the character's 'status' instead of the query 'status' (#12045) (958308812) by @sukvvon
- examples/react/rick-morty: read the episode's 'air_date' instead of the nonexistent 'airDate' (#12046) (116818a61) by @sukvvon
- examples/react/chat: give each question an 'id' so repeated questions get their own React key and query (#12047) (817f823b9) by @sukvvon
- examples/react/chat: use camelCase 'strokeWidth', 'strokeLinecap' and 'strokeLinejoin' on the send icon (#12048) (8ca99d1e5) by @sukvvon
- eslint-plugin-query/exhaustive-deps: remove the unused 'fixable' from the rule metadata (#12044) (a5f1b092b) by @sukvvon
- examples/react/suspense: prefetch the projects in the click handler instead of inside the 'setShowProjects' updater (#12056) (a636462b8) by @sukvvon
- examples/react/react-router: replace the deprecated 'ensureQueryData' with 'query' and 'staleTime: 'static'' in the loaders (#12052) (584fd6414) by @sukvvon
- examples/react/react-native: pass the movie title in route params and show the cached list item as 'placeholderData' (#12037) (e75ecbedf) by @sukvvon
- *: update '@tanstack/typedoc-config' to v0.3.5 (#12035) (f38e6271b) by @sukvvon
- integrations: remove the unused legacy '.eslintrc.cjs' configs (#12040) (e90c0bdb8) by @sukvvon
- examples/react/react-native: add a flat config and run 'test:eslint' (#12039) (eb94a5b44) by @sukvvon
- oxlint.config: ignore 'examples' and 'integrations', which are not linted by Oxlint (#12038) (0e19ad7c3) by @sukvvon
- @tanstack/angular-query-experimental@5.104.4
- @tanstack/eslint-plugin-query@5.104.4
- @tanstack/lit-query@0.2.29
- @tanstack/preact-query@5.104.4
- @tanstack/preact-query-devtools@5.104.4
- @tanstack/preact-query-persist-client@5.104.4
- @tanstack/query-async-storage-persister@5.104.4
- @tanstack/query-broadcast-client-experimental@5.104.4
- @tanstack/query-core@5.104.4
- @tanstack/query-devtools@5.104.4
- @tanstack/query-persist-client-core@5.104.4
- @tanstack/query-sync-storage-persister@5.104.4
- @tanstack/react-query@5.104.4
- @tanstack/react-query-devtools@5.104.4
- @tanstack/react-query-next-experimental@5.104.4
- @tanstack/react-query-persist-client@5.104.4
- @tanstack/solid-query@5.104.4
- @tanstack/solid-query-devtools@5.104.4
- @tanstack/solid-query-persist-client@5.104.4
- @tanstack/svelte-query@6.3.4
- @tanstack/svelte-query-devtools@6.3.4
- @tanstack/svelte-query-persist-client@6.3.4
- @tanstack/vue-query@5.104.4
- @tanstack/vue-query-devtools@6.3.4
slate-dom@0.146.0
- #6332
4e73172Thanks @dylans! - AddNode.findPath(root, node), which finds a node's path by walking the tree and returnsundefinedif the node isn't there. It doesn't depend on rendering, so it works without slate-react, for example on a server.DOMEditor.findPathuses it as its fallback when the rendered node maps are stale.
slate@0.146.0
- #6332
4e73172Thanks @dylans! - AddNode.findPath(root, node), which finds a node's path by walking the tree and returnsundefinedif the node isn't there. It doesn't depend on rendering, so it works without slate-react, for example on a server.DOMEditor.findPathuses it as its fallback when the rendered node maps are stale.
- #6331
cfd8049Thanks @dylans! - Batches insideEditor.withoutNormalizingspend less time on dirty path bookkeeping. An operation that can't map two dirty paths onto one, which is every path-changing operation exceptmerge_node, no longer rebuilds the dirty path key set. 5,000 splits of one block in a batch go from about 7.9 s to 3.7 s. The dirty paths and their order are unchanged.
slate-react@0.145.1
- #6329
3d7b2faThanks @dylans! - A click inside the editor whose handler changes the clicked node, for example a<select>that callssetNodeson its element or a suggestion that inserts text, no longer throws "Unable to find the path for Slate node".Editable's click handling now returns when the clicked node is no longer in the document, which its existing check intended butfindPathstarted throwing before it since 0.142.
slate-react@0.145.0
- #6327
89a74deThanks @dylans! - Add a controlledvalueprop toSlate. Pass the value fromonValueChangeback in, and Slate recognizes that exact object and doesn't apply it again. Any other value is applied as a change from outside the editor througheditor.setChildren, in a layout effect, so the selection and history stay valid. Values passed in aren't reported throughonValueChange. Updates wait while the user is composing text or Android has pending input, and only the latest is applied.valueandinitialValuetogether throw.
- #6325
6cb0eb4Thanks @dylans! - A DOM selection change made just before the editor loses focus now reacheseditor.selection. Selection changes are processed a little later than they happen, and since 0.142 changes processed after blur were ignored, so for example clicking an element whose handler blurs the editor could leaveeditor.selectionwhere it was before the click. Blur now processes any pending selection change first.
slate@0.144.0
-
#6314
64b036bThanks @dylans! - AddTransforms.setChildren(editor, children)and the overridableeditor.setChildrenmethod, which apply an outside document through Slate operations instead of replacingeditor.children. Unchanged nodes are kept, matched by identity or deep equality; shared nodes move withmove_node; and text changes becomeinsert_text/remove_text, so the selection, refs and history stay valid.withHistoryrecords eachsetChildrencall as one undo step, separate from typing before and after it.BaseEditornow requiressetChildren.createEditorsupplies it, but editors built by hand and test mocks must add it.
- #6320
a21292fThanks @Marve10s! - FixEditor.positionsandTransforms.movereturning points inside consecutive non-selectable elements, or inside a non-selectable first child of a void or read-only element. Deleting beside two non-selectable blocks, or beside a read-only block whose content is all non-selectable, now removes them instead of merging their text.