我如何从 Axios 请求访问数据
How can i access data from an Axios request
我将 React JS 与 Redux 结合使用,在使用 Axios 从请求中检索数据时遇到了一点问题..
这是我的 Axios 请求:
import Axios from 'axios';
class UsersApi {
static getAllUsers() {
return Axios.get('http://localhost:3001/user').then(response => {
return response;
});
}
}
export default UsersApi;
这就是我要使用我的数据的地方:
import React, {Component} from 'react';
import {connect} from 'react-redux';
class UserList extends Component {
render(){
console.log(this.props.users);
return(
<ul>
</ul>
);
}
}
function mapStateToProps(state) {
return {
users: state.users
};
}
export default connect(mapStateToProps)(UserList);
这是动作:
import UsersApi from '../api/UsersApi';
export function loadUsers() {
return function(dispatch) {
return UsersApi.getAllUsers().then(users => {
dispatch(loadUsersSuccess(users));
}).catch(error => {
throw(error);
});
};
}
export function loadUsersSuccess(users) {
return {type: 'LOAD_USERS_SUCCESS', users};
}
这是我的减速器:
import initialState from './initialState';
export default function usersReducer(state = initialState.users, action) {
switch(action.type) {
case "LOAD_USERS_SUCCESS":
return action.users
default:
return state;
}
}
这就是我对 console.log 的看法:Result console.log
当我尝试显示第一个用户的密码时,我输入 console.log(this.props.users.data["0"].pwd) 但这不起作用..
如果我在请求中尝试 return response.data["0"].pwd,我可以使用 console.log(this.props.users).
但问题是我想要每个用户的数据..
我需要一些帮助。 :)
作为一种正确的 redux 做事方式,就在 get
调用的 then
中,您需要触发一个操作 SET_USERS
,您将在其中使用 reducer 来用从 api.
回来的新用户替换您的状态
首先,您需要将用户添加到您的状态。我看到你正在使用 redux,所以你应该在收到你的用户后发送一个动作并让你的 reducer 处理它:
Axios.get('http://localhost:3001/user').then(response => {
dispatch(usersLoaded(response.data));
});
您应该有一个名为 usersLoaded
的操作和一个处理它的减速器:
const usersLoaded = users => ({ type: 'USERS_LOADED', payload: users });
const users = (state = [], action) => {
switch(action.type) {
case 'USERS_LOADED':
return action.payload;
default:
return state;
}
}
这样您就可以在 UserList
组件中访问您的用户
我将 React JS 与 Redux 结合使用,在使用 Axios 从请求中检索数据时遇到了一点问题..
这是我的 Axios 请求:
import Axios from 'axios';
class UsersApi {
static getAllUsers() {
return Axios.get('http://localhost:3001/user').then(response => {
return response;
});
}
}
export default UsersApi;
这就是我要使用我的数据的地方:
import React, {Component} from 'react';
import {connect} from 'react-redux';
class UserList extends Component {
render(){
console.log(this.props.users);
return(
<ul>
</ul>
);
}
}
function mapStateToProps(state) {
return {
users: state.users
};
}
export default connect(mapStateToProps)(UserList);
这是动作:
import UsersApi from '../api/UsersApi';
export function loadUsers() {
return function(dispatch) {
return UsersApi.getAllUsers().then(users => {
dispatch(loadUsersSuccess(users));
}).catch(error => {
throw(error);
});
};
}
export function loadUsersSuccess(users) {
return {type: 'LOAD_USERS_SUCCESS', users};
}
这是我的减速器:
import initialState from './initialState';
export default function usersReducer(state = initialState.users, action) {
switch(action.type) {
case "LOAD_USERS_SUCCESS":
return action.users
default:
return state;
}
}
这就是我对 console.log 的看法:Result console.log
当我尝试显示第一个用户的密码时,我输入 console.log(this.props.users.data["0"].pwd) 但这不起作用..
如果我在请求中尝试 return response.data["0"].pwd,我可以使用 console.log(this.props.users).
但问题是我想要每个用户的数据..
我需要一些帮助。 :)
作为一种正确的 redux 做事方式,就在 get
调用的 then
中,您需要触发一个操作 SET_USERS
,您将在其中使用 reducer 来用从 api.
首先,您需要将用户添加到您的状态。我看到你正在使用 redux,所以你应该在收到你的用户后发送一个动作并让你的 reducer 处理它:
Axios.get('http://localhost:3001/user').then(response => {
dispatch(usersLoaded(response.data));
});
您应该有一个名为 usersLoaded
的操作和一个处理它的减速器:
const usersLoaded = users => ({ type: 'USERS_LOADED', payload: users });
const users = (state = [], action) => {
switch(action.type) {
case 'USERS_LOADED':
return action.payload;
default:
return state;
}
}
这样您就可以在 UserList
组件中访问您的用户