我有一家
const initialState = {
users: dummyData,
is_created: false
};
其中users
是一个数组。然后是getUsers
选择器const getUsers = state => state.users;
在组件内部,我使用了useSelector
来访问我的状态。
const { users } = useSelector(state => ({
users: getUsers(state),
}));
当我尝试遍历users
for (let i = 0; i < users.length; i++) {
//...
}
我收到一个错误Cannot read property 'length' of undefined
答案 0 :(得分:0)
myplot <- ggplot(mydata, aes(id, group = group)) +
geom_bar(aes(y = value, fill = id), stat="sum") +
facet_grid(~group)
myplot
似乎在任意时间运行提供的功能,因此由于其useSelector
的性质,不能保证在需要时定义users
。
解决此问题的几种方法:
首先为async
定义默认值,例如:
users
那应该可以解决您的问题。
使用 const { users = [] } = useSelector(state => ({
users: getUsers(state),
}));
循环增强您上面的代码将不依赖于for
循环,而是使用for
,如下所示:
.map
答案 1 :(得分:0)
我从redux开发工具图表中发现了错误。我正在使用CombineReducers(),并在users
组件名称之后命名了reducer,即
export default combineReducers({
users: users.reducers,
});
所以正确的选择器应该是
const getUsers = state => state['users'].users;