diff --git a/packages/router/src/__tests__/util.test.ts b/packages/router/src/__tests__/util.test.ts index bf8c4833abf3..092b75ee5d0f 100644 --- a/packages/router/src/__tests__/util.test.ts +++ b/packages/router/src/__tests__/util.test.ts @@ -451,4 +451,10 @@ describe('replaceParams', () => { expect(replaceParams('/calc', { expr: '1+2' })).toEqual('/calc?expr=1%2B2') }) + + it('skips search parameters with `undefined` and `null` values', () => { + expect(replaceParams('/s', { a: '', b: 0, c: undefined, d: null })).toEqual( + '/s?a=&b=0', + ) + }) }) diff --git a/packages/router/src/util.ts b/packages/router/src/util.ts index 60efde1a979b..e85d6b3312fa 100644 --- a/packages/router/src/util.ts +++ b/packages/router/src/util.ts @@ -308,7 +308,9 @@ export function replaceParams( }) const paramNames = params.map((param) => param[0]) - const extraArgKeys = Object.keys(args).filter((x) => !paramNames.includes(x)) + const extraArgKeys = Object.keys(args) + .filter((x) => !paramNames.includes(x)) + .filter((x) => args[x] !== undefined && args[x] !== null) // Append any unnamed params as search params. if (extraArgKeys.length) {