【发布时间】:2021-06-14 16:03:10
【问题描述】:
我在使用 redux 时遇到了问题。我有两个包含对象的数组,最初它们是空的。 其中一个数组包含被用户标记为“收藏”的对象。
const INITIAL_STATE = {
favorites: [],
recipes: [],
};
我用于添加项目的减速器:
const reducer = (state = INITIAL_STATE, action) => {
switch (action.type) {
case "TOGGLE_FAVORITES":
if (!state.favorites.includes(action.payload)) {
return { ...state, favorites: [...state.favorites, action.payload] };
}
return {
...state,
favorites: state.favorites.filter(
(recipe) => recipe.id !== action.payload.id
),
};
case "REMOVE_FROM_FAVORITES":
return {
...state,
favorites: state.favorites.filter(
(recipe) => recipe.id !== action.payload
),
};
case "GET_RECIPES":
return {
...state,
recipes: action.payload,
};
default:
return state;
}
};
如果用户决定添加然后从收藏夹中删除,我为同一个按钮设置了这种“切换”类型。
问题是 当我将项目添加到数组时,它不会立即更新。我的意思是,在第一次“添加”时单击我的 favorites 数组是空的,但是当我添加另一个项目时,它显示里面有一个项目,依此类推。
有没有办法在我添加一些内容以显示当前状态时更新状态?
检查是否喜欢这样:
const [isFavorite, setIsFavorite] = useState(false);
// Checking if recipe is favorite when rendered
useEffect(() => {
const checkIfIsFavorite = (id) => {
for (let i = 0; favorites.length > 1; i++) {
if (id === favorites[i].id) {
return true;
}
return false;
}
};
setIsFavorite(checkIfIsFavorite(recipe.id));
}, [favorites, recipe.id]);
【问题讨论】:
-
您能分享一下您希望如何使用状态吗?
-
对不起,我想检查项目是否在数组中以将按钮颜色更改为绿色(最喜欢时)或在不喜欢时将其保留为灰色。将项目添加到数组并显示它是有效的。但我不知道如何让它在渲染按钮颜色时读取状态。
-
请您向我们展示而不是描述它?
-
当然,编辑了问题 - 注意,我是新手
-
嗨,你能分享一下 redux 操作以及你在哪里调用它们吗?谢谢!
标签: javascript reactjs redux