【发布时间】:2020-09-21 15:29:35
【问题描述】:
我目前有一个组件可以从后端提取一副卡片,并尝试从这些卡片的值中创建一个图表。在第一次加载时,一切正常并且图表填充。然而,在刷新时,decks 属性似乎是未定义的(尽管 redux devtools 显示它仍然存在)。
使用效果:
useEffect(() => {
getDecks(); // sets "decks"
populateData();
}, []);
const populateData = () => {
var data = [0, 0, 0, 0, 0];
cardArray = decks[0].cards; // crashes here on reload; decks is undef.
...
createChart(data);
};
export const getDecks = () => async (dispatch) => {
try {
const res = await axios.get("/api/decks");
dispatch({
type: GET_DECKS,
payload: res.data,
});
} catch (err) {
dispatch({
type: DECK_ERROR,
payload: { msg: err.response.statusText, status: err.response.status },
});
}
};
甲板减速器的初始状态:
const initialState = {
decks: [],
currentCard: 0,
loading: true,
error: {},
isFlipped: false,
};
我看过类似的帖子,这些帖子建议我将卡片组存储在本地存储中,但我还有其他调用 getDecks 的组件显示来自它们的数据,与此类似,没有任何问题。有没有人有任何提示或可能的原因为什么会这样做?谢谢。
【问题讨论】:
-
每次刷新页面时,一旦组件加载完毕,就会调用 useEffect() 挂钩。结果,你的 redux 状态被设置回它们的初始状态,直到某些东西导致这个状态改变。如果有什么东西阻止这个初始状态恢复
decks的新值,那么它将保持未定义。您能否提供更多关于 getDecks() 调用您的套牌的内容或方式的想法,或者可以在这里分享? -
如果您想知道如何共享您的代码,您必须编辑您的帖子并将其添加到那里。
-
我更新了帖子! getDecks() 只是向我的后端发出一个 get 请求,该请求发回一个包含一组卡组(用于多个卡组)的卡组对象,并将其分配给 redux 存储中的
decks。decks中的每个卡片组都有一个名为cards的数组,用于保存卡片对象。 -
在调用useEffect()的组件内部,你收到
decksprops了吗? -
你能分享你初始化卡组状态的代码吗?
标签: reactjs redux react-redux use-effect