Интересно, можно ли отправить действие из другого редуктора в API Slice Redux RTK. Предполагая, что у меня есть это
getSomething: builder.query<SomeProps, void>({
query: () => ({
url: "...",
headers: {
'Content-Type': 'application/json',
}
}),
Возможно ли иметь там что-то вроде onSuccess (при условии, что getSomething() возвращает 200/что-нибудь, что приводит к успеху)
getSomething: builder.query<SomeProps, void>({
query: () => ({
url: "...",
headers: {
'Content-Type': 'application/json',
}
}),
onSuccess: (response: SomeProps, {dispatch}) => {
dispatch(someActionFromAnotherReducer(response))
}






Вы можете сделать это, используя onQueryStarted
Функция, которая вызывается при запуске каждого отдельного запроса или мутации. Функция вызывается с помощью объекта API жизненного цикла, содержащего такие свойства, как queryFulfilled, позволяющие запускать код при запуске запроса, при его успешном выполнении и при сбое (т. е. на протяжении жизненного цикла отдельного запроса или вызова мутации).
import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
import { messageCreated } from './notificationsSlice'
export interface Post {
id: number
name: string
}
const api = createApi({
baseQuery: fetchBaseQuery({
baseUrl: '/',
}),
endpoints: (build) => ({
getPost: build.query<Post, number>({
query: (id) => `post/${id}`,
async onQueryStarted(id, { dispatch, queryFulfilled }) {
// `onStart` side-effect
dispatch(messageCreated('Fetching post...'))
try {
const { data } = await queryFulfilled
// `onSuccess` side-effect
dispatch(messageCreated('Post received!'))
} catch (err) {
// `onError` side-effect
dispatch(messageCreated('Error fetching post!'))
}
},
}),
}),
})
См. также: RTK-запрос: отправка внутреннего запроса или мутаций
@four-eyes Удовлетворяет ли Автоматическая повторная загрузка вашим требованиям?
Можно ли также запустить, скажем,
mutationдругую конечную точку, определенную в срезе API. Предположим, у меня естьeditPost: build.mutation<Post, number>({...}). Могу ли я активироватьgetPost()при успешном редактировании?