From be6d95355c314ea82a8a34cafa6e4d3eaa670605 Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Wed, 13 Nov 2019 14:57:03 +0800 Subject: [PATCH] fix: deprecate hacky did-update --- src/components/SideBar.tsx | 6 +++--- src/utils/hooks.ts | 11 +++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/components/SideBar.tsx b/src/components/SideBar.tsx index a58639e..c2d40ca 100644 --- a/src/components/SideBar.tsx +++ b/src/components/SideBar.tsx @@ -14,6 +14,7 @@ import * as React from 'react' import { cx } from 'utils/cx' import * as DOMHelper from 'utils/DOMHelper' import { JSONRequest, parseURLSearch } from 'utils/general' +import { useDidUpdate } from 'utils/hooks' import * as keyHelper from 'utils/keyHelper' const RawGitako: React.FC = function RawGitako(props) { @@ -60,9 +61,8 @@ const RawGitako: React.FC = function RawGitako(props) { DOMHelper.decorateGitHubPageContent({ copyFileButton, copySnippetButton }) }, []) - // reload when setting new accessToken - // special way to implement didUpdate - React.useEffect(() => () => props.init(), [accessToken]) + // init again when setting new accessToken + useDidUpdate(() => props.init(), [accessToken]) const { errorDueToAuth, diff --git a/src/utils/hooks.ts b/src/utils/hooks.ts index 8f24fde..fe55030 100644 --- a/src/utils/hooks.ts +++ b/src/utils/hooks.ts @@ -68,3 +68,14 @@ export function useAsyncMemo( }, deps) return state.val } + +export function useDidUpdate(effect: React.EffectCallback, deps?: React.DependencyList) { + const firstTime = React.useRef(true) + React.useEffect(() => { + if (firstTime.current) { + firstTime.current = false + return + } + return effect() + }, deps) +}