这是我第一次使用useReducer()钩子,并且我遇到了一个问题,需要将一个值作为参数传递给它。
以下是我的reducer代码:
const memoizedReducer = useCallback((state, action) => {
switch (action.type) {
case "save":
const refreshedBookData = {
...state.bookData,
...(state.bookData.totalSaves >= 0 && {
totalSaves: state.bookData.totalSaves + 1,
}),
isSaved: true,
};
// Add the new book data to a Map which I have in a Context provider
currentUser.addBookToVisitedBooks(bookId, refreshedBookData);
// Update my context provider data
currentUser.setData((prevCurrentUserData) => {
return {
...prevCurrentUserData,
...(prevCurrentUserData.totalSaves >= 0 && {
totalSaves: prevCurrentUserData.totalSaves + 1,
}),
};
});
return refreshedBookData;
case "unsave":
const refreshedBookData = {
...state.bookData,
...(state.otheBookData.totalSaves >= 0 && {
totalSaves: state.bookData.totalSaves - 1,
}),
isSaved: false,
};
// Add the new book data to a Map which I have in a Context provider
currentUser.addBookToVisitedBooks(bookId, refreshedBookData);
// Update my context provider data
currentUser.setData((prevCurrentUserData) => {
return {
...prevCurrentUserData,
...(prevCurrentUserData.totalSaves > 0 && {
totalSaves: prevCurrentUserData.totalSaves - 1,
}),
};
});
return refreshedBookData;
default:
return state;
});
const [{ bookData }, dispatch] = useReducer(memoizedReducer, {
bookData: params?.bookData
});
正如您所看到的,我正在做的事情是:
1- 如果操作类型是“save”,则增加该书籍的总保存次数,将新书籍数据添加到我在上下文中拥有的“visitedBooks”映射中(忽略此部分),并更新我的currentUser数据以增加他的总保存次数。
2- 如果操作类型是“unsave”,则执行相反的操作。
我的问题是,我需要向reducer传递一个参数“reviews”。例如,如果我有一个从数据库中获取“额外数据”的函数:
const fetchReviews = async (bookId) => {
// Get a list of reviews from the db
const reviews = await db.fetchReviews(bookId);
return reviews;
}
我是这样使用它的:
const reviews = await fetchReviews(bookId);
如何将评论作为参数传递给Reducer?
dispatch({ type: saved ? "save" : "unsave" });
感谢您的选择。