-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
refactor: switch to useSyncExternalStoreWithSelector #1953
Conversation
* Upgrade to jest 28 * Upgrade to jest 28
state update should be handled by uSESW
This pull request is automatically built and testable in CodeSandbox. To see build info of the built libraries, click here or the icon next to each commit SHA. Latest deployment of this branch, based on commit f23117b:
|
This would not be an appropriate place to ask, but currently SWR stores some information like a current key and store into Should SWR migrate the usage of useRef objects like this PR does, or is it safe as long as |
As far as i know, updating ref in effect is concurrent safe. |
@@ -37,7 +37,7 @@ describe('useSWR - error', () => { | |||
{ onError: (_, errorKey) => (erroredSWR = errorKey) } | |||
) | |||
if (error) return <div>{error.message}</div> | |||
return <div>hello, {data}</div> | |||
return <div><>hello, {data}</></div> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why do we adding Fragment here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks and great work!
could you add more explanation about the links in PR description section?
how about move the swr/
dir to core/
or other dir that doesn't have the same name with repo?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, this is incredible work!
* type: extends useConfig cache interface (vercel#1938) * remove mount check for react18 (vercel#1927) reactwg/react-18#82 related pr vercel#787 vercel#433 * lint: dont check unused vars with underscore prefix (vercel#1939) * test: upgrade to jest 28 (vercel#1942) * Upgrade to jest 28 * Upgrade to jest 28 * feat: useSyncExternalStoreWithSelector * refactor: remove stateUpdate and boardcast state update should be handled by uSESW * type: fix test type error * remove pnpm.lock * fix: import cjs for codesanbox * refactor: add selector * refactor: add cachestate interface and try fix custom cache * fix: custom cache init * refactor: remove useless flag * chore: codesanbox ci * refactor: remove force render in infinite * build: add _internal * chore: mark warning test * fix: dts generation * codesanbox ci * chore: rename swr folder to core Co-authored-by: Jiachi Liu <inbox@huozhi.im>
* update state in a transition * support snapshotting external state * wip * move types:check to pre-commit * refactor: switch to useSyncExternalStoreWithSelector (#1953) * type: extends useConfig cache interface (#1938) * remove mount check for react18 (#1927) reactwg/react-18#82 related pr #787 #433 * lint: dont check unused vars with underscore prefix (#1939) * test: upgrade to jest 28 (#1942) * Upgrade to jest 28 * Upgrade to jest 28 * feat: useSyncExternalStoreWithSelector * refactor: remove stateUpdate and boardcast state update should be handled by uSESW * type: fix test type error * remove pnpm.lock * fix: import cjs for codesanbox * refactor: add selector * refactor: add cachestate interface and try fix custom cache * fix: custom cache init * refactor: remove useless flag * chore: codesanbox ci * refactor: remove force render in infinite * build: add _internal * chore: mark warning test * fix: dts generation * codesanbox ci * chore: rename swr folder to core Co-authored-by: Jiachi Liu <inbox@huozhi.im> * chore: useSES should be external (#1960) * rename type * types: update cache types * chore: move @types/useSES to devDependencies Co-authored-by: Shu Ding <g@shud.in> Co-authored-by: Jiachi Liu <inbox@huozhi.im>
This PR is intented to solve the 'tearing' problem described in #794 for React 18.
Example for 'tearing' in React 18: https://codesandbox.io/s/concurrent-swr-case-iii-shu-s5fggt
It will also solve the cache initialization problem in StrictMode
#1904 https://codesandbox.io/s/swr-1904-mxfft8
#1949 https://codesandbox.io/s/swr-1949-22d6iw
limitations
Accroding to the useSES RFC
examples:
https://codesandbox.io/s/concurrent-swr-case-i-shu-dckwqj
https://codesandbox.io/s/concurrent-swr-case-ii-shu-3j5j2e