From 659bd7443e6cf23e2e9323fed437545e45478957 Mon Sep 17 00:00:00 2001 From: Uni <1025687605@qq.com> Date: Wed, 5 Apr 2023 18:31:15 +0800 Subject: [PATCH] feat: add --- fixtures/ssr/package.json | 4 ++-- fixtures/ssr/server/render.js | 28 ++++++++++++----------- fixtures/ssr/src/App.js | 4 ++-- fixtures/ssr/src/Comments.js | 1 + fixtures/ssr/src/index.js | 2 +- fixtures/ssr/yarn.lock | 29 +++++++++++------------- package.json | 8 +++---- src/context.tsx | 8 ++++++- src/suspense.ts | 8 ++++--- yarn.lock | 42 ++++++++++++++--------------------- 10 files changed, 67 insertions(+), 67 deletions(-) diff --git a/fixtures/ssr/package.json b/fixtures/ssr/package.json index e8abf3a..db1907c 100644 --- a/fixtures/ssr/package.json +++ b/fixtures/ssr/package.json @@ -15,8 +15,8 @@ "concurrently": "^5.3.0", "express": "^4.17.1", "nodemon": "^2.0.6", - "react": "^18.0.0-beta-24dd07bd2-20211208", - "react-dom": "^18.0.0-beta-24dd07bd2-20211208", + "react": "^18.1.0", + "react-dom": "^18.1.0", "react-error-boundary": "^3.1.3", "react-fetch": "0.0.0-experimental-44cdfd6b7", "resolve": "1.12.0", diff --git a/fixtures/ssr/server/render.js b/fixtures/ssr/server/render.js index 1f1c08b..f7fd2da 100644 --- a/fixtures/ssr/server/render.js +++ b/fixtures/ssr/server/render.js @@ -42,15 +42,16 @@ module.exports = function render(url, res) { }) let didError = false const data = createServerData() - const method = createSuspenseFetch() + // const method = createSuspenseFetch() + let str = 'window.xxx = 11' const { pipe, abort } = renderToPipeableStream( - - - + {/* */} + + {/* */} , { - onCompleteShell() { + onShellReady() { // If something errored before we started streaming, we set the error code appropriately. res.statusCode = didError ? 500 : 200 res.setHeader('Content-type', 'text/html') @@ -61,14 +62,14 @@ module.exports = function render(url, res) { didError = true console.error(x) }, - onCompleteAll() { - const cache = method.getCache() - const str = renderScriptHtml(cache) - res.write(str) - console.log(str) - console.log('------- complete ---------') - }, - bootstrapScriptContent: 'xxx' + onAllReady() { + // const cache = method.getCache() + // str = renderScriptHtml(cache) + // console.log(str) + // console.log('------- complete ---------') + } + // bootstrapScriptContent: str + // bootstrapScripts: ['1.js'] } ) // Abandon and switch to client rendering if enough time passes. @@ -94,6 +95,7 @@ function createServerData() { setTimeout(() => { done = true promise = null + console.log('请求 in server------') resolve() }, API_DELAY) }) diff --git a/fixtures/ssr/src/App.js b/fixtures/ssr/src/App.js index 938cc29..9a34295 100644 --- a/fixtures/ssr/src/App.js +++ b/fixtures/ssr/src/App.js @@ -63,12 +63,12 @@ function Content() { -
+ {/*

Comments for suspense fetch

}> -
+
*/} {/*

Comments for react fetch

}> diff --git a/fixtures/ssr/src/Comments.js b/fixtures/ssr/src/Comments.js index f4d9f4a..b56e551 100644 --- a/fixtures/ssr/src/Comments.js +++ b/fixtures/ssr/src/Comments.js @@ -10,6 +10,7 @@ import { useData } from './data' export default function Comments() { const comments = useData() + console.log('in server---', comments) return ( <> {comments.map((comment, i) => ( diff --git a/fixtures/ssr/src/index.js b/fixtures/ssr/src/index.js index b6009c8..2eb029f 100644 --- a/fixtures/ssr/src/index.js +++ b/fixtures/ssr/src/index.js @@ -6,7 +6,7 @@ * */ -import { hydrateRoot } from 'react-dom' +import { hydrateRoot } from 'react-dom/client' import App from './App' import { SuspenseFetchProvider, getServerInitialData } from 'use-suspense-fetch' diff --git a/fixtures/ssr/yarn.lock b/fixtures/ssr/yarn.lock index c6833bb..c4a7123 100644 --- a/fixtures/ssr/yarn.lock +++ b/fixtures/ssr/yarn.lock @@ -4098,14 +4098,13 @@ rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-dom@^18.0.0-beta-24dd07bd2-20211208: - version "18.0.0-beta-24dd07bd2-20211208" - resolved "https://registry.npmmirror.com/react-dom/download/react-dom-18.0.0-beta-24dd07bd2-20211208.tgz#d2fbcc9a080f9983945b4e53db33bba7f7a560f6" - integrity sha512-B6pxB3+lI+Tct6WKs+Db5JKSfQUqcfAXz706EMdRlx4qs+PcMpftgicRNO7j6F6zqMMn8bqV1tjHQaqw00UcGg== +react-dom@^18.1.0: + version "18.1.0" + resolved "https://registry.npmmirror.com/react-dom/-/react-dom-18.1.0.tgz#7f6dd84b706408adde05e1df575b3a024d7e8a2f" + integrity sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "0.21.0-beta-24dd07bd2-20211208" + scheduler "^0.22.0" react-error-boundary@^3.1.3: version "3.1.3" @@ -4119,13 +4118,12 @@ react-fetch@0.0.0-experimental-44cdfd6b7: resolved "https://registry.nlark.com/react-fetch/download/react-fetch-0.0.0-experimental-44cdfd6b7.tgz#c2d6a3a43842c7125587843ff35fd0c2fbf156fc" integrity sha1-wtajpDhCxxJVh4Q/81/QwvvxVvw= -react@^18.0.0-beta-24dd07bd2-20211208: - version "18.0.0-beta-24dd07bd2-20211208" - resolved "https://registry.npmmirror.com/react/download/react-18.0.0-beta-24dd07bd2-20211208.tgz#6bfe825f1253390136f1723c03dfea5bae5c5eec" - integrity sha512-XyDoCS4UisFJGfiBDnVeOUbJoyAyxwM/YET8hExf9gFLMJX2bRR+v2OvO7k5jhoUamEQ9xCuvoqs9Kf1QfA3Jg== +react@^18.1.0: + version "18.1.0" + resolved "https://registry.npmmirror.com/react/-/react-18.1.0.tgz#6f8620382decb17fdc5cc223a115e2adbf104890" + integrity sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" read-pkg@^4.0.1: version "4.0.1" @@ -4383,13 +4381,12 @@ safe-regex@^1.1.0: resolved "https://registry.nlark.com/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo= -scheduler@0.21.0-beta-24dd07bd2-20211208: - version "0.21.0-beta-24dd07bd2-20211208" - resolved "https://registry.npmmirror.com/scheduler/download/scheduler-0.21.0-beta-24dd07bd2-20211208.tgz#c2564d3f3b6cef16a58f340435f32f70a03998ed" - integrity sha512-h2+U1Cg6w2k3mrURC2769U3L116ZaeMSVRYJdm6R4n99z1XJq5Hus7+JeM5fO0djBKPO3kykilTw/16tp+cOjA== +scheduler@^0.22.0: + version "0.22.0" + resolved "https://registry.npmmirror.com/scheduler/-/scheduler-0.22.0.tgz#83a5d63594edf074add9a7198b1bae76c3db01b8" + integrity sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" schema-utils@^1.0.0: version "1.0.0" diff --git a/package.json b/package.json index 8f27ed4..5d938e2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "use-suspense-fetch", - "version": "1.5.0", + "version": "1.6.0", "main": "lib/index.js", "repository": "https://github.com/snakeUni/use-suspense-fetch.git", "author": "fox <1025687605@qq.com>", @@ -17,11 +17,11 @@ "devDependencies": { "@types/jest": "^26.0.23", "@types/lru-cache": "^5.1.0", - "@types/react": "^17.0.11", + "@types/react": "^18.0.9", "@types/serialize-javascript": "^5.0.0", "jest": "^27.0.6", - "react": "^18.0.0-beta-24dd07bd2-20211208", - "react-dom": "^18.0.0-beta-24dd07bd2-20211208", + "react": "^18.1.0", + "react-dom": "^18.1.0", "ts-jest": "^27.0.3", "typescript": "^4.3.2", "yalc": "^1.0.0-pre.53" diff --git a/src/context.tsx b/src/context.tsx index 7e2b6c3..0f8e3e0 100644 --- a/src/context.tsx +++ b/src/context.tsx @@ -83,8 +83,14 @@ export function SuspenseFetchProvider({ return {children} } +const suspenseFetch = createSuspenseFetch(0, {}, true) + +/** + * 如果使用 Provider 则支持自定义的缓存,否则使用全局缓存 + * @returns + */ export function useSuspenseFetch(): ReturnMethod { - const value = useContext(context) + const value = useContext(context) || suspenseFetch return value as any } diff --git a/src/suspense.ts b/src/suspense.ts index 8e989fb..967fcec 100644 --- a/src/suspense.ts +++ b/src/suspense.ts @@ -92,7 +92,7 @@ interface FetchOptions { export default function suspenseFetch( key: string, fn: PromiseFn, - option: FetchOptions = { } + option: FetchOptions = {} ): Response { return handleSuspenseFetch({ promiseFn: fn, @@ -149,14 +149,16 @@ function clearInner(cache: Cache, key?: string) { * 创建自己的 LRU 缓存,支持配置选项 * @param lifeSpan 过期时间 * @param option 配置选项 + * @param useGlobalCache 是否使用全局缓存,使用全局缓存的时候,option 将会失效 * @returns */ export function createSuspenseFetch( lifeSpan = 0, - option: Options = {} + option: Options = {}, + useGlobalCache = false ): ReturnMethod { const innerOption = { ...defaultOption, ...option } - const cache = new LRU(innerOption) + const cache = useGlobalCache ? globalCache : new LRU(innerOption) return { fetch: (key: string, fn: PromiseFn) => diff --git a/yarn.lock b/yarn.lock index 0c77543..02d93a6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -604,10 +604,10 @@ resolved "https://registry.nlark.com/@types/prop-types/download/@types/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" integrity sha1-KrDV2i5YFflLC51LldHl8kOrLKc= -"@types/react@^17.0.11": - version "17.0.11" - resolved "https://registry.nlark.com/@types/react/download/@types/react-17.0.11.tgz#67fcd0ddbf5a0b083a0f94e926c7d63f3b836451" - integrity sha1-Z/zQ3b9aCwg6D5TpJsfWPzuDZFE= +"@types/react@^18.0.9": + version "18.0.9" + resolved "https://registry.npmmirror.com/@types/react/-/react-18.0.9.tgz#d6712a38bd6cd83469603e7359511126f122e878" + integrity sha512-9bjbg1hJHUm4De19L1cHiW0Jvx3geel6Qczhjd0qY5VKVE2X5+x77YxAepuCwVh4vrgZJdgEJw48zrhRIeF4Nw== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -2117,11 +2117,6 @@ nwsapi@^2.2.0: resolved "https://registry.npm.taobao.org/nwsapi/download/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" integrity sha1-IEh5qePQaP8qVROcLHcngGgaOLc= -object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.nlark.com/object-assign/download/object-assign-4.1.1.tgz?cache=0&sync_timestamp=1618847198142&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fobject-assign%2Fdownload%2Fobject-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - once@^1.3.0: version "1.4.0" resolved "https://registry.nlark.com/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -2266,27 +2261,25 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" -react-dom@^18.0.0-beta-24dd07bd2-20211208: - version "18.0.0-beta-24dd07bd2-20211208" - resolved "https://registry.npmmirror.com/react-dom/download/react-dom-18.0.0-beta-24dd07bd2-20211208.tgz#d2fbcc9a080f9983945b4e53db33bba7f7a560f6" - integrity sha512-B6pxB3+lI+Tct6WKs+Db5JKSfQUqcfAXz706EMdRlx4qs+PcMpftgicRNO7j6F6zqMMn8bqV1tjHQaqw00UcGg== +react-dom@^18.1.0: + version "18.1.0" + resolved "https://registry.npmmirror.com/react-dom/-/react-dom-18.1.0.tgz#7f6dd84b706408adde05e1df575b3a024d7e8a2f" + integrity sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "0.21.0-beta-24dd07bd2-20211208" + scheduler "^0.22.0" react-is@^17.0.1: version "17.0.2" resolved "https://registry.nlark.com/react-is/download/react-is-17.0.2.tgz?cache=0&sync_timestamp=1624897053623&other_urls=https%3A%2F%2Fregistry.nlark.com%2Freact-is%2Fdownload%2Freact-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha1-5pHUqOnHiTZWVVOas3J2Kw77VPA= -react@^18.0.0-beta-24dd07bd2-20211208: - version "18.0.0-beta-24dd07bd2-20211208" - resolved "https://registry.npmmirror.com/react/download/react-18.0.0-beta-24dd07bd2-20211208.tgz#6bfe825f1253390136f1723c03dfea5bae5c5eec" - integrity sha512-XyDoCS4UisFJGfiBDnVeOUbJoyAyxwM/YET8hExf9gFLMJX2bRR+v2OvO7k5jhoUamEQ9xCuvoqs9Kf1QfA3Jg== +react@^18.1.0: + version "18.1.0" + resolved "https://registry.npmmirror.com/react/-/react-18.1.0.tgz#6f8620382decb17fdc5cc223a115e2adbf104890" + integrity sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" require-directory@^2.1.1: version "2.1.1" @@ -2342,13 +2335,12 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" -scheduler@0.21.0-beta-24dd07bd2-20211208: - version "0.21.0-beta-24dd07bd2-20211208" - resolved "https://registry.npmmirror.com/scheduler/download/scheduler-0.21.0-beta-24dd07bd2-20211208.tgz#c2564d3f3b6cef16a58f340435f32f70a03998ed" - integrity sha512-h2+U1Cg6w2k3mrURC2769U3L116ZaeMSVRYJdm6R4n99z1XJq5Hus7+JeM5fO0djBKPO3kykilTw/16tp+cOjA== +scheduler@^0.22.0: + version "0.22.0" + resolved "https://registry.npmmirror.com/scheduler/-/scheduler-0.22.0.tgz#83a5d63594edf074add9a7198b1bae76c3db01b8" + integrity sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" semver@7.x, semver@^7.3.2: version "7.3.5"