Skip to content

Commit

Permalink
[useSyncExternalStore] use useSyncExternalStore instead of custom use…
Browse files Browse the repository at this point in the history
…Effect
  • Loading branch information
Ayc0 committed May 21, 2022
1 parent 8ebad74 commit 858c480
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 47 deletions.
10 changes: 7 additions & 3 deletions packages/react-manatea/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,15 @@
"build:action": "microbundle --name $npm_package_name --globals react=React",
"build": "yarn build:clean && yarn build:action"
},
"dependencies": {
"use-sync-external-store": "^1.1.0"
},
"devDependencies": {
"@types/react": "^17.0.30",
"@types/react": "^18.0.9",
"@types/use-sync-external-store": "^0.0.3",
"microbundle": "^0.14.1",
"react": "~17.0.2",
"react-test-renderer": "~17.0.2",
"react": "^18.1.0",
"react-test-renderer": "^18.1.0",
"typescript": "^4.4.4"
},
"peerDependencies": {
Expand Down
18 changes: 7 additions & 11 deletions packages/react-manatea/src/useInfuser.ts
Original file line number Diff line number Diff line change
@@ -1,26 +1,22 @@
import * as React from 'react';
import { Cup, Tea, Server, Context } from 'manatea';
import { useSyncExternalStore } from 'use-sync-external-store/shim';

export const useInfuser = <
FlavoredTea extends Tea,
UnflavoredTea extends Tea = FlavoredTea,
>(
cup: Cup<FlavoredTea, UnflavoredTea>,
) => {
const [flavoredTea, setFlavoredTea] = React.useState(() => cup());

React.useEffect(() => {
const server: Server = cup.on((newlyFlavoredTea: FlavoredTea) =>
setFlavoredTea(newlyFlavoredTea),
);
setFlavoredTea(cup());
return () => {
if (server.listening) {
server();
}
const subscribe = React.useMemo(() => {
return (notify: () => void) => {
const server: Server = cup.on(notify);
return () => server();
};
}, [cup]);

const flavoredTea = useSyncExternalStore<FlavoredTea>(subscribe, () => cup());

return [
flavoredTea,
(unflavoredTea: UnflavoredTea, context?: Context) =>
Expand Down
88 changes: 55 additions & 33 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2174,14 +2174,14 @@ __metadata:
languageName: node
linkType: hard

"@types/react@npm:^17.0.30":
version: 17.0.30
resolution: "@types/react@npm:17.0.30"
"@types/react@npm:^18.0.9":
version: 18.0.9
resolution: "@types/react@npm:18.0.9"
dependencies:
"@types/prop-types": "*"
"@types/scheduler": "*"
csstype: ^3.0.2
checksum: e3aaac1b8fda6e3622b75db0bd7d8dc412c2f2b77a00afdd32cae8c71fb0b1ca6926ab1fbe1c536dd51d96c0ba372738993837a8df1637637aaab7b86e421b7f
checksum: 162364dad716d9017ee34aabf2ea37499709ebbdef70392ae1b39225985971e1a46f121efb9c5c7da92144ee1d96d4525df806a7c1c03a5db7fd31dd034ddc7a
languageName: node
linkType: hard

Expand All @@ -2208,6 +2208,13 @@ __metadata:
languageName: node
linkType: hard

"@types/use-sync-external-store@npm:^0.0.3":
version: 0.0.3
resolution: "@types/use-sync-external-store@npm:0.0.3"
checksum: 161ddb8eec5dbe7279ac971531217e9af6b99f7783213566d2b502e2e2378ea19cf5e5ea4595039d730aa79d3d35c6567d48599f69773a02ffcff1776ec2a44e
languageName: node
linkType: hard

"@types/yargs-parser@npm:*":
version: 20.2.0
resolution: "@types/yargs-parser@npm:20.2.0"
Expand Down Expand Up @@ -6553,7 +6560,14 @@ __metadata:
languageName: node
linkType: hard

"react-is@npm:^16.12.0 || ^17.0.0, react-is@npm:^17.0.1, react-is@npm:^17.0.2":
"react-is@npm:^16.12.0 || ^17.0.0 || ^18.0.0, react-is@npm:^18.1.0":
version: 18.1.0
resolution: "react-is@npm:18.1.0"
checksum: d206a0fe6790851bff168727bfb896de02c5591695afb0c441163e8630136a3e13ee1a7ddd59fdccddcc93968b4721ae112c10f790b194b03b35a3dc13a355ef
languageName: node
linkType: hard

"react-is@npm:^17.0.1":
version: 17.0.2
resolution: "react-is@npm:17.0.2"
checksum: 9d6d111d8990dc98bc5402c1266a808b0459b5d54830bbea24c12d908b536df7883f268a7868cfaedde3dd9d4e0d574db456f84d2e6df9c4526f99bb4b5344d8
Expand All @@ -6564,50 +6578,50 @@ __metadata:
version: 0.0.0-use.local
resolution: "react-manatea@workspace:packages/react-manatea"
dependencies:
"@types/react": ^17.0.30
"@types/react": ^18.0.9
"@types/use-sync-external-store": ^0.0.3
microbundle: ^0.14.1
react: ~17.0.2
react-test-renderer: ~17.0.2
react: ^18.1.0
react-test-renderer: ^18.1.0
typescript: ^4.4.4
use-sync-external-store: ^1.1.0
peerDependencies:
manatea: "workspace:*"
react: ">=16.8.2"
languageName: unknown
linkType: soft

"react-shallow-renderer@npm:^16.13.1":
version: 16.14.1
resolution: "react-shallow-renderer@npm:16.14.1"
"react-shallow-renderer@npm:^16.15.0":
version: 16.15.0
resolution: "react-shallow-renderer@npm:16.15.0"
dependencies:
object-assign: ^4.1.1
react-is: ^16.12.0 || ^17.0.0
react-is: ^16.12.0 || ^17.0.0 || ^18.0.0
peerDependencies:
react: ^16.0.0 || ^17.0.0
checksum: f344c663c48720d19559b4198b1f63ad47a3f11bedc92ede053a6c0706b5209e6110086f3ccc6db04eda9f0d1a415845956ddfb6ce09a922167d4831fcba9314
react: ^16.0.0 || ^17.0.0 || ^18.0.0
checksum: 6052c7e3e9627485120ebd8257f128aad8f56386fe8d42374b7743eac1be457c33506d153c7886b4e32923c0c352d402ab805ef9ca02dbcd8393b2bdeb6e5af8
languageName: node
linkType: hard

"react-test-renderer@npm:~17.0.2":
version: 17.0.2
resolution: "react-test-renderer@npm:17.0.2"
"react-test-renderer@npm:^18.1.0":
version: 18.1.0
resolution: "react-test-renderer@npm:18.1.0"
dependencies:
object-assign: ^4.1.1
react-is: ^17.0.2
react-shallow-renderer: ^16.13.1
scheduler: ^0.20.2
react-is: ^18.1.0
react-shallow-renderer: ^16.15.0
scheduler: ^0.22.0
peerDependencies:
react: 17.0.2
checksum: e6b5c6ed2a0bde2c34f1ab9523ff9bc4c141a271daf730d6b852374e83acc0155d58ab71a318251e953ebfa65b8bebb9c5dce3eba1ccfcbef7cc4e1e8261c401
react: ^18.1.0
checksum: 401a0020ff39ebdb37e015197ab11ceb13ddb7004716b7fb6304b169f20d6b0c4d0e14aaa0da139ce2b1eb14088cf370b5771b30fee52f16d6b682b5332c5781
languageName: node
linkType: hard

"react@npm:~17.0.2":
version: 17.0.2
resolution: "react@npm:17.0.2"
"react@npm:^18.1.0":
version: 18.1.0
resolution: "react@npm:18.1.0"
dependencies:
loose-envify: ^1.1.0
object-assign: ^4.1.1
checksum: b254cc17ce3011788330f7bbf383ab653c6848902d7936a87b09d835d091e3f295f7e9dd1597c6daac5dc80f90e778c8230218ba8ad599f74adcc11e33b9d61b
checksum: 5bb296b561b43ef2220395da4faac86c14a087c8c80e1a7598a5740f01ee605c11eaf249985c1e2000971c4cd32ccb46d40f00479bbd9fb6b1c7cf857393b7d4
languageName: node
linkType: hard

Expand Down Expand Up @@ -6949,13 +6963,12 @@ [email protected]:
languageName: node
linkType: hard

"scheduler@npm:^0.20.2":
version: 0.20.2
resolution: "scheduler@npm:0.20.2"
"scheduler@npm:^0.22.0":
version: 0.22.0
resolution: "scheduler@npm:0.22.0"
dependencies:
loose-envify: ^1.1.0
object-assign: ^4.1.1
checksum: c4b35cf967c8f0d3e65753252d0f260271f81a81e427241295c5a7b783abf4ea9e905f22f815ab66676f5313be0a25f47be582254db8f9241b259213e999b8fc
checksum: a8ef5cab769c020cd6382ad9ecc3f72dbde56a50a36639b3a42ad9c11f7724f03700bcad373044059b8067d4a6365154dc7c0ca8027ef20ff4900cf58a0fc2c5
languageName: node
linkType: hard

Expand Down Expand Up @@ -7719,6 +7732,15 @@ typescript@^4.4.4:
languageName: node
linkType: hard

"use-sync-external-store@npm:^1.1.0":
version: 1.1.0
resolution: "use-sync-external-store@npm:1.1.0"
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
checksum: 8993a0b642f91d7fcdbb02b7b3ac984bd3af4769686f38291fe7fcfe73dfb73d6c64d20dfb7e5e7fbf5a6da8f5392d6f8e5b00c243a04975595946e82c02b883
languageName: node
linkType: hard

"util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1":
version: 1.0.2
resolution: "util-deprecate@npm:1.0.2"
Expand Down

0 comments on commit 858c480

Please sign in to comment.