From 5c82516d93f93b94d1e16b7bfb216286074ae18d Mon Sep 17 00:00:00 2001 From: Jason Quense Date: Wed, 31 Aug 2022 12:03:29 -0400 Subject: [PATCH] fix: react 18 Strict mode issues The one behavioral change made is that The Router component will no longer `dispose` of the farce navigation subscription on unmount. This never was correct to do in the first place since remounting would not re subscribe. If you need to tear down the farce protocol you can dispatch dispose manually --- src/createBaseRouter.js | 3 +-- src/createFarceRouter.js | 17 +++-------------- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/src/createBaseRouter.js b/src/createBaseRouter.js index 65027669..8bdf3b03 100644 --- a/src/createBaseRouter.js +++ b/src/createBaseRouter.js @@ -41,8 +41,6 @@ export default function createBaseRouter({ element: initialRenderArgs ? render(initialRenderArgs) : null, }; - this.mounted = true; - this.lastIteration = 0; this.pendingResolvedMatch = false; @@ -60,6 +58,7 @@ export default function createBaseRouter({ // about having to pass around nextProps. componentDidMount() { + this.mounted = true; if (!this.props.initialRenderArgs) { this.resolveMatch(); } diff --git a/src/createFarceRouter.js b/src/createFarceRouter.js index faf6e58e..766a23d9 100644 --- a/src/createFarceRouter.js +++ b/src/createFarceRouter.js @@ -1,11 +1,5 @@ import useIsomorphicEffect from '@restart/hooks/useIsomorphicEffect'; -import FarceActions from 'farce/Actions'; -import React, { - forwardRef, - useEffect, - useImperativeHandle, - useState, -} from 'react'; +import React, { forwardRef, useImperativeHandle, useState } from 'react'; import createBaseRouter from './createBaseRouter'; import createFarceStore from './createFarceStore'; @@ -48,17 +42,12 @@ export default function createFarceRouter({ }); }, []); - useEffect(() => { - return () => { - // eslint-disable-next-line react-hooks/exhaustive-deps - store.dispatch(FarceActions.dispose()); - }; - }, []); - useImperativeHandle(ref, () => store, []); return ; }); + FarceRouter.displayName = 'FarceRouter'; + return FarceRouter; }