我不知道如何调用组件中的函数,将它们作为参数传递.例如,接受完整的参观或删除.以便在后端和store 中进行更新.
以下是我的接口:
import { TourType } from "../../types/types";
import { api } from "./api";
export const tourAPI = api.injectEndpoints({
endpoints: (builder) => ({
getAllTour: builder.query<{ message: string; data: TourType[] }, void>({
query: () => ({
url: "/tour",
method: "GET",
}),
}),
getTourByTourNumber: builder.query<TourType, string>({
query: (number) => ({
url: `/tour/number/${number}`,
method: "GET",
}),
}),
editTour: builder.mutation<string, TourType>({
query: (tour) => ({
url: `/tour`,
method: "PUT",
body: tour,
}),
}),
removeTour: builder.mutation<string, number>({
query: (number) => ({
url: `/tour`,
method: "DELETE",
body: { number: number },
}),
}),
addTour: builder.mutation<TourType, TourType>({
query: (tour) => ({
url: "/tour/create",
method: "POST",
body: tour,
}),
}),
}),
});
export const {
useGetAllTourQuery,
useGetTourByTourNumberQuery,
useEditTourMutation,
useRemoveTourMutation,
useAddTourMutation,
} = tourAPI;
export const {
endpoints: {
getAllTour,
getTourByTourNumber,
editTour,
removeTour,
addTour
},
} = tourAPI;
我的切入点是:
import { createSlice } from "@reduxjs/toolkit";
import { TourType } from "../../types/types";
import { tourAPI } from "../api/tourAPI";
import { RootState } from "../../store/store";
interface InitialState {
tour: TourType[];
loading: boolean;
}
const initialState: InitialState = {
tour: [],
loading: true,
};
const slice = createSlice({
name: "tour",
initialState,
reducers: {
logout: () => initialState,
},
extraReducers: (builder) => {
builder.addMatcher(
tourAPI.endpoints.getAllTour.matchFulfilled,
(state, action) => {
state.tour = action.payload.data;
}
);
},
});
export default slice.reducer;
export const selectTour = (state: RootState): TourType[] => state.tour.tour;
现在我可以通过这种方式获得所有的旅游:
const { data, isLoading } = useGetAllTourQuery();
我是这样添加的:
const [addTour] = useAddTourMutation();
...
const handleAddTour = async (data: TourType) => {
try {
await addTour(data).unwrap();
} catch (err) {
const maybeError = isErrorWithMessage(err);
if (maybeError) {
setError(err.data.message);
} else {
setError("Error");
}
}
};
旅游已添加,但store 不会更新,新的store 也不会出现在页面上.