Redux-Toolkit Query:如何仅在参数非空时添加查询参数?
优化非空查询参数的处理方式
你的现有写法在参数较少时尚可,但参数增多后会出现大量重复的判断逻辑,这里提供两种更高效的优化方案:
方案一:封装通用过滤工具函数(推荐多参数场景)
把过滤空值参数的逻辑抽成可复用的工具函数,不管多少参数都能一键处理:
// 通用过滤函数:移除值为 null/undefined/空字符串的参数 function filterEmptyParams(params) { const filtered = {}; Object.entries(params).forEach(([key, value]) => { // 可根据需求调整判断条件,比如要不要排除空数组、0等 if (value != null && value !== '') { filtered[key] = value; } }); return filtered; }
使用示例(新增参数无需修改过滤逻辑):
query: (category: string | null, priceMin: number | null, searchText: string | '') => { // 先把所有参数放入原始对象 const rawParams = { category, priceMin, search: searchText }; // 一键过滤空值参数 const params = filterEmptyParams(rawParams); return { url: "/products", params, }; },
方案二:对象展开+短路判断(适合参数较少的场景)
无需额外编写工具函数,直接用ES6展开运算符配合短路逻辑,仅添加非空参数:
query: (category: string | null) => { return { url: "/products", params: { // 仅当 category 非 null/undefined 时,才添加该属性 ...(category != null && { category }), }, }; },
多参数场景下直接追加即可:
params: { ...(category != null && { category }), ...(priceMin != null && { priceMin }), ...(searchText !== '' && { search: searchText }), },
补充:TypeScript类型安全优化
如果使用TypeScript,可以给工具函数添加类型约束,确保过滤后的参数类型正确:
function filterEmptyParams<T extends Record<string, unknown>>(params: T): Partial<T> { const filtered: Partial<T> = {}; Object.entries(params).forEach(([key, value]) => { if (value != null && value !== '') { filtered[key as keyof T] = value; } }); return filtered; }
内容的提问来源于stack exchange,提问作者Homo
相关产品推荐
相关产品推荐

