-
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
Fix mutateCallback
types
#745
Conversation
Actually Generally we don't want you to do this: mutate(key, () => undefined) Because in SWR |
Thanks for clearing things out. The main problem that we've faced is that sometimes when we're calling export type mutateCallback<Data = any> = (
- currentValue: Data
+ currentValue: undefined | Data
) => Promise<Data> | Data But this leads to another problem when we have only part of the value to update: function updateStatus(guid: string, status: string): void {
mutate(`/user/${guid}`, (user) => ({ ...user, status }));
} It will create function updateStatus(guid: string, status: string): void {
mutate(`/user/${guid}`, (user) => !user ? user : ({ ...user, status }));
} Here TS will fail because it expects the result of the export type mutateCallback<Data = any> = (
- currentValue: Data
- ) => Promise<Data> | Data
+ currentValue: undefined | Data
+ ) => Promise<Data | undefined> | Data | undefined |
@shuding hey, sorry to disturb, but can you check one more time please, and if it can't be merged I'll just close this PR. |
@umidbekkarimov Sorry for the delay! Now I understand your use case and I think that makes sense. We can have it. 👍 Thanks for the contribution! |
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 already looking great. When we move to next
strict mode will work 👍
First, thanks for improving the types, this will definitely help make apps more robust! I'm not sure where to ask this and I understand swr is 0.x but are type breaks like this considered a breaking change or more like a bug? |
@Zertz This PR is a bug fix and should be available in the latest release already (if not please let me know). But regarding TS strict mode, I'd consider it a pretty breaking change because we need to revamped the core code base and the tests. The goal is to also have better type names in the 1.0 version. |
* 0.3.8 * replace rIC with rAF (#744) * Fix race condition when calling mutate synchronously (#735) * fix race condition when calling mutate synchronously * fix test * add comment * fix code reviews * refactor: support SSR in Deno (#754) * refactor: support SSR in Deno * refactor: improve Deno determining * Add @ts-ignore Co-authored-by: Shu Ding <g@shud.in> Co-authored-by: Shu Ding <g@shud.in> * fix eslint error (#768) * Fix `mutateCallback` types (#745) * Fix `mutateCallback` types * WIP * Add CodeSandbox CI (#769) * add CodeSandbox CI * add new line * fix install cmd Co-authored-by: Paco <34928425+pacocoursey@users.noreply.github.com> * dispatch's payload type is actionType and run lint (#772) * chore: payload is actionType * chore: move a ts-ignore comment * Fix suspense (#777) * fix #494 * add comment * rename to initialMountedRef * 0.3.9 * fix: mark isValidating as false when key is falsy (#757) * fix: tear down when key turns to empty * use false for empty key * Fix README.md typo (#783) '/api/data' => '/api/user' in "Multiple Arguments" * fix: do mount check in config callback (#787) * Update api-hooks example README.md (#790) Updated the Vercel deploy link to the correct directory * Return '@null' if args is null ASAP (#767) * chore: return 'null' if arg[i] is null ASAP * chore: update comment * chore: use continue * Bump ini from 1.3.5 to 1.3.8 (#806) Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.8. - [Release notes](https://github.com/isaacs/ini/releases) - [Commits](npm/ini@v1.3.5...v1.3.8) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * update test Co-authored-by: Shu Ding <g@shud.in> Co-authored-by: X <git@iamje.com> Co-authored-by: Umidbek Karimov <uma.karimov@gmail.com> Co-authored-by: Paco <34928425+pacocoursey@users.noreply.github.com> Co-authored-by: matamatanot <39780486+matamatanot@users.noreply.github.com> Co-authored-by: Jiachi Liu <inbox@huozhi.im> Co-authored-by: sAy <47605337+mingcenwei@users.noreply.github.com> Co-authored-by: William Crutchfield <william.r.crutchfield@gmail.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
1.Promise<Data | undefined>
becausemutate
implementation handlesundefined
values.mutate
implementation can passundefined
values to themutateCallback
:swr/src/use-swr.ts
Lines 138 to 144 in 9e734aa