reactjs - TypeError:无法读取未定义的属性“地图”,但我的变量是空数组
问题描述
我有一个名为“groups”的变量,它从 redux 商店接收值:
const groups = useSelector(state => state.groupPermissionsStates.groups);
我的减速器用一个空数组初始化这个变量:
const INITIAL_STATE = {
groups: [],
lastPage: 1
}
const groupPermissionsStates = (state = INITIAL_STATE, action) => {
switch (action.type) {
case "REQUEST_GET_GROUPS_PERMISSIONS":
return {
...state,
groups: action.payload.data,
lastPage: action.payload.lastPage
}
case "CLEAR_GROUPS_PERMISSIONS_LIST":
return {
...state,
groups: [],
lastPage: 1
}
default:
return state
}
}
export default groupPermissionsStates;
在我的模板中,我正在做一个group.map()
遍历这个数组,但我收到:
TypeError:无法读取未定义的属性“地图”
我检查这个变量是否正在使用 useEffect 更改您的值,但只打印一次并且您的值是一个空数组:
useEffect(() => {
console.log(groups)
}, [groups]); // eslint-disable-line
当我放一个{ groups && groups.map(group => (
而不是
{ groups.map(group => (
我没有收到此错误并且我的页面启动。
我的组件安装后是我的商店加载吗?我有其他组件,我以前不使用检查器并正常运行:
{users.map(user => (
这个 users 是一个变量,你的代码基于 redux 存储:
const users = useSelector(state => state.userStates.users);
我发现这两个组件之间没有任何区别,除了使用 users 变量的组件有一个useEffect()
向我的服务器发出请求并返回填充的用户数组。
@编辑:
这是我的根减速器:
import userStates from '../modules/users/user.reducer'
import groupPermissionsStates from './group-permissions/group-permissions.reducer'
import { combineReducers } from 'redux'
const rootReducer = combineReducers({
groupPermissionsStates
userStates
})
我的商店创建:
import { createStore, applyMiddleware } from 'redux';
import createSagaMiddleware from 'redux-saga';
import rootReducer from './modules/rootReducer';
import rootSaga from './modules/rootSaga';
const sagaMiddleware = createSagaMiddleware();
const enhancer =
process.env.NODE_ENV === 'development'
? applyMiddleware(sagaMiddleware)
: applyMiddleware(sagaMiddleware);
const store = createStore(rootReducer, enhancer);
sagaMiddleware.run(rootSaga);
export default store;
我的 index.js:
ReactDOM.render(
<Provider store={store}>
<SnackbarProvider autoHideDuration={3500} maxSnack={3}>
<Notifier />
<AppRouter/>
</SnackbarProvider>
</Provider>, document.getElementById('root'));
serviceWorker.unregister();
我的地图:
{ groups.map(group => (
<TableRow key={group.id}>
<TableCell component="th" scope="row">
{group.name}
</TableCell>
<TableCell align="right">
{group.inactive === false
? "Sim"
: "Não"}
</TableCell>
<TableCell align="right">
<IconButton
color="primary"
aria-label="editar"
onClick={() => editGroup(group)}
>
<EditIcon />
</IconButton>
</TableCell>
</TableRow>
))}
解决方案
推荐阅读
- python - 即使在 git-bash.exe 上运行良好,“conda activate”在 bash.exe 上也会失败
- sql - 通过将表列映射到其他表的列值来重命名表列
- java - 在 fileinputstream 输入中分离文件并将数据插入到 oracle 表中
- marklogic - 从表中提取数据 (MarkLogic)
- angular - 在一个数组中合并/组合/加入两个 Observable 数组,并在 Ionic 3 应用程序中一起使用 ngFor 显示它
- flask - 通过前端将用户指定的本地文件上传到 Google Cloud Storage
- google-sheets - 有没有办法在制作特定例外时计算工作表上的所有单词?
- android - 电池会话的含义?
- arrays - 数组没有填充正确的数据
- javascript - 使用 swig 创建 C++ 到 javascript 的包装器时生成错误