Создание thunk Flashcards

(1 cards)

1
Q

Создание thunk

A

Возов санки в компоненте:
useEffect(() => {
dispatch(fetchTodolistsTC())
}, [])

Санка в бизнесс-логике:
export const fetchTodolistsTC = createAsyncThunk(
${todolistsSlice.name}/fetchTodolistsTC,
async (_, thunkAPI) => {
try {
const res = await todolistsApi.getTodolists()
thunkAPI.dispatch(setTodolistsAC({ todolists: res.data }))
} catch (error) {
console.log(error)
}
}
)

Автоматическое создание экшена (https://redux-toolkit.js.org/api/createAsyncThunk#return-value):
export const todolistsSlice = createSlice({
//
extraReducers: builder => {
builder.addCase(fetchTodolistsTC.fulfilled, (state, action) => {
return action.payload.todolists.map(tl => {
return { …tl, filter: ‘all’ }
})
})
},
reducers: create => ({
// ❌ удалите setTodolistsAC
/setTodolistsAC: create.reducer<{ todolists: Todolist[] }>((state, action) => {
action.payload.todolists.forEach(tl => {
state.push({ …tl, filter: ‘all’ })
})
}),
/
//
}),
})

export const fetchTodolistsTC = createAsyncThunk(
${todolistsSlice.name}/fetchTodolistsTC,
async (_, thunkAPI) => {
try {
const res = await todolistsApi.getTodolists()
return { todolists: res.data }
} catch (error) {
return thunkAPI.rejectWithValue(error)
}
}
)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly