如何使用REST显示数据?

时间:2020-07-30 15:58:54

标签: reactjs api rest redux

帮助,我无法显示来自服务器的数据。在控制台中,我看到它们来了,但是当我尝试访问数组或通过map调用它时,结果是不确定的。实施的问题可能出在哪里? Redux中的新手,如果可能的话,我请您详细回答。

App.js

import React from 'react';
import {Component} from "react";
import './App.css';
import {connect} from 'react-redux';
import {fetchUsersListRequest} from "./action/users";

class App extends Component {

    componentDidMount() {
        const {usersData} = this.props;

        usersData("https://reqres.in/api/users?page=2");
    }

    render() {
        const {users} = this.props;
        return (
     

                <div className="apiList">
                    <ul>
                        {users.map(userItem =>
                        <li>{userItem}</li>
                        )}
                    </ul>
                </div>
        
        );
    }
}

function mapStateToProps(state) {
    return {
        states: state.cars,
        users: state.users
    }
}

function mapDispatchToProps(dispatch) {
    return {
        addCar: (newCar) => {
            dispatch({type: 'NEW_CAR', payload: newCar})
        },
        usersData: (url) => {
            dispatch(fetchUsersListRequest(url))
        }
    }
}

export default connect(mapStateToProps, mapDispatchToProps)(App);

store.js

import {combineReducers, createStore, applyMiddleware} from 'redux';
import thunk from "redux-thunk";
import reducers from './reducers/reducers';
import usersList from './reducers/usersList';



 const allReducers = combineReducers({
     cars : reducers,
     users: usersList
})

let store = createStore(allReducers,
    applyMiddleware(thunk));

export default store;

reducer.js

const initialState = [];

 export default function usersList(state = initialState, action) {
     switch(action.type) {
         case "USERS_LIST_DATA":
             return action.users

         default:
             return state;

     }

action.js

export function fetchUsersList(users) {
    return {
        type: "USERS_LIST_DATA",
        users
    }
}


export function fetchUsersListRequest(url) {
    return(dispatch)=> {
        fetch(url)
            .then(response => {
                    if (!response.ok) {
                        throw new Error(response.statusText);
                    }
                    return response;
                }
            )
            .then(response => response.json())
            .then(response => dispatch(fetchUsersList(response)))
    }
}

1 个答案:

答案 0 :(得分:1)

那是因为您的用户未直接包含在响应中。因此,您需要像这样分配用户:

export function fetchUsersListRequest(url) {
return(dispatch)=> {
    fetch(url)
        .then(response => {
                if (!response.ok) {
                    throw new Error(response.statusText);
                }
                return response;
            }
        )
        .then(response => response.json())
        .then(response => dispatch(fetchUsersList(response.data)))
}

}