From cfdf47c6e9639e483b5b20d4a31dd3d0e5599526 Mon Sep 17 00:00:00 2001 From: Craig Harshbarger Date: Thu, 23 Jan 2025 16:29:19 -0600 Subject: [PATCH 1/3] Add a failing test --- src/tests/routeProps.browser.spec.ts | 53 ++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/tests/routeProps.browser.spec.ts diff --git a/src/tests/routeProps.browser.spec.ts b/src/tests/routeProps.browser.spec.ts new file mode 100644 index 00000000..2e316f80 --- /dev/null +++ b/src/tests/routeProps.browser.spec.ts @@ -0,0 +1,53 @@ +import { vi, test, expect } from 'vitest' +import { createRoute } from '@/services/createRoute' +import { createRouter } from '@/services/createRouter' +import { defineComponent, h } from 'vue' +import { mount } from '@vue/test-utils' + +test('components are not remounted when props change', async () => { + const props = vi.fn().mockImplementation(() => ({ prop: 'foo' })) + const setup = vi.fn() + + const route = createRoute({ + name: 'test', + path: '/[param]', + component: defineComponent({ + setup() { + setup() + + return { props } + }, + render() { + return h('div', {}, 'test') + }, + }), + }, props) + + const router = createRouter([route], { + initialUrl: '/bar', + }) + + const root = { + template: '', + } + + mount(root, { + global: { + plugins: [router], + }, + }) + + await router.start() + + await router.route.update({ param: 'foo' }) + + expect(setup).toHaveBeenCalledTimes(1) + + await router.route.update({ param: 'bar' }) + + expect(setup).toHaveBeenCalledTimes(1) + + await router.route.update({ param: 'foo' }) + + expect(setup).toHaveBeenCalledTimes(1) +}) From 053e4ea1d37caf8420bb5c3a91b0c1af5fca6b69 Mon Sep 17 00:00:00 2001 From: Craig Harshbarger Date: Fri, 24 Jan 2025 16:46:58 -0600 Subject: [PATCH 2/3] Rework how the component wrappers work to not be factories --- src/components/echo.ts | 4 +- src/components/routerView.vue | 36 +++---- src/services/component.ts | 136 +++++++++++++-------------- src/tests/routeProps.browser.spec.ts | 11 +-- 4 files changed, 84 insertions(+), 103 deletions(-) diff --git a/src/components/echo.ts b/src/components/echo.ts index 3ea2457d..0d1a38ed 100644 --- a/src/components/echo.ts +++ b/src/components/echo.ts @@ -1,7 +1,7 @@ import { defineComponent } from 'vue' -export default defineComponent(({ value }) => { - return () => value +export default defineComponent((props) => { + return () => props.value }, { props: { value: { diff --git a/src/components/routerView.vue b/src/components/routerView.vue index 11f9ad81..af9bcb28 100644 --- a/src/components/routerView.vue +++ b/src/components/routerView.vue @@ -1,28 +1,27 @@ - -