Я пытаюсь получить данные пользователей из API.У меня ошибка:
Невозможно прочитать свойство 'map' из неопределенного при получении данных
Я прочитал и проверил много примеров того, что сделали другие. Кажется, довольно легкофигура, но, поскольку я новичок, я не смог понять, откуда возникла ошибка.
Где моя ошибка?Почему эта ошибка появляется и что ее вызвало?
import {
LOGIN_REQUEST, LOGIN_SUCCESS, LOGIN_FAILURE, LOG_OUT,
GETALL_REQUEST, GETALL_SUCCESS, GETALL_FAILURE
} from './types';
import axios from 'axios';
export function getAllUser() {
return dispatch => {
dispatch(request());
axios.get('https://jsonplaceholder.typicode.com/users')
.then(res => console.info(res.data))
.then(
users => dispatch(success(users)),
error => dispatch(failure(error))
)
}
function request() {
return { type: GETALL_REQUEST }
}
function success(users) {
return {
type: GETALL_SUCCESS,
payload: users
}
}
function failure(error) {
return {
type: GETALL_FAILURE,
error
}
}
}
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import { getAllUser } from '../../actions/authenticationActions';
class Users extends Component {
componentWillMount() {
this.props.getAllUser()
}
render() {
console.info(`users:`, this.props.users)
const userList = this.props.users.map(user => (
<tr key={user.id}>
<td>{user.name}</td>
<td>{user.username}</td>
<td>{user.email}</td>
</tr>
));
if (!userList) {
return (
<div>
Not Found...
</div>
)
}
return (
<div>
<table className="table">
<thead>
<tr>
<th scope="col">Name</th>
<th scope="col">Username</th>
<th scope="col">Email</th>
</tr>
</thead>
<tbody>{userList}</tbody>
</table>
</div>
);
}
}
Users.propTypes = {
getAllUser: PropTypes.func.isRequired,
};
const mapStateToProps = state => {
console.info('state', state);
return {
users: state.users.items,
isFetching: state.users.isFetching
}
};
const mapDispatchToProps = dispatch => {
return {
getAllUser: users => dispatch(getAllUser(users))
}
}
export default connect(mapStateToProps, mapDispatchToProps)(Users);
import { GETALL_REQUEST, GETALL_SUCCESS, GETALL_FAILURE } from '../actions/types';
const initialState = {
items: [],
item: {},
isFetching: true
}
export default function (state = initialState, action) {
switch (action.type) {
case GETALL_REQUEST:
return {
...state,
isFetching: true,
};
case GETALL_SUCCESS:
return {
...state,
items: action.payload,
isFetching: false
};
case GETALL_FAILURE:
return {}
default:
return state
}
}