使用injectEndpoints拆分RTK Query文件时遇builder未定义错误
问题原因及修复方案
你遇到的Uncaught ReferenceError: builder is not defined错误是因为两处语法错误:
错误点1:endpoints的写法错误
endpoints需要是一个接收builder作为参数的箭头函数,而不是直接写builder ({...})。正确的写法是endpoints: (builder) => ({ ... })。
错误点2:query/mutation的调用错误
你代码里的build.query和build.mutation应该改为builder.query和builder.mutation——这里的builder是上面函数参数传入的对象,不是拼写错误的build。
修正后的完整代码
import { apiSlice } from "./apiSlice"; export const accountsSlice = apiSlice.injectEndpoints({ endpoints: (builder) => ({ getAccounts: builder.query({ query: () => ({ url: '/api/accounts', method: 'get' }), providesTags: (result, error, arg) => [{ type: 'Account', id: arg }] }), getAccount: builder.query({ query: accountId => ({ url: `/api/accounts/${accountId}`, method: 'get', }), providesTags: (result, error, arg) => [{ type: 'Account', id: arg }] }), addAccount: builder.mutation({ query: (account) => { console.log('account data:', account); return { url: `/api/accounts/store`, method: 'post', data: account } }, invalidatesTags: (result, error, arg) => [{ type: 'Account'}] }), updateAccount: builder.mutation({ query: (account) => { console.log('account data:', account); return { url: `/api/accounts/${account.acc_id}/update`, method: 'patch', data: account } }, invalidatesTags: (result, error, arg) => [{ type: 'Account', id: arg.id}] }), }) })
额外建议:针对你有8个数据集需要维护CRUD操作的场景,可以封装一个通用的endpoint注入函数,或者结合RTK Query的实体适配器自动生成基础CRUD接口,大幅减少重复代码,降低维护成本。
内容的提问来源于stack exchange,提问作者maganthro
相关产品推荐
相关产品推荐

