【问题标题】:ReactJS | Cannot get data on ComponentDidMountReactJS |无法获取 ComponentDidMount 上的数据
【发布时间】:2019-07-30 15:07:08
【问题描述】:

我正在从本地 Mock-API 获取数据。服务器发送的数据格式如下:

module.exports = [
  {
    username: "george",
    email: "george@test.com",
    group: "foo",
    loggedIn: true
  },
  {
    username: "nick",
    email: "nick@test.com",
    group: "bar",
    loggedIn: false
  }
];

基本上,您可以看到一个用户列表。每个用户的唯一 ID 是他们的username。在我的 ReactJS U.I 中,我有一个用户列表。当我点击其中一个用户时,我会被重定向到一个新页面,并且 url 会根据我点击的用户的不同而发生变化

但我无法获取有关该用户的任何数据。我得到一个用JSON.Stringify 打印的空字符串。这是我的代码:

/* eslint-disable react/prefer-stateless-function */
import React, { Component, Fragment } from 'react';
import PropTypes from 'prop-types';

import PageHeader from './PageHeader';
import Breadcrumb from './Breadcrumb';
import Role from 'shared/common/enums/Role';

import { getUser } from '../../config/service';

class UserDetailsScreen extends Component {
  state = {
    inEditMode: false,
    user: {},
    error: null
  };

  componentDidMount() {
    this.fetchUser();
  }

  fetchUser = () => {
    getUser().then(({ data }) => {
      this.setState({ user: data });
    });
  };

  render() {
    const {user } = this.state;
    return (
      <div className="container-fluid">
        <div><pre>{JSON.stringify(user, null, 2)}</pre></div>
        {user && (
          <Fragment>
            <Breadcrumb
              items={[
                {
                  name: 'Users',
                  url: 'users'
                },
                {
                  name: user.username,
                  url: `${user.username}`
                }
              ]}
            />
            <h1 className="heading-title">{user.username}</h1>
        )}
      </div>
    );
  }
}

export default UserDetailsScreen;

getUser() 是一个在我的本地端点上侦听的函数。这是端点:GET_USER: name =&gt;http://localhost:5000/api/user/${name},

这里是getUser()

export const getUser = name => {
  const options = {
    method: httpMethod.GET,
    url: endpoint.GET_USER(name)
  };
  return instance(options);
};

这是 Dyson 服务器实例,用于获取具有用户名作为唯一 ID 的特定用户:

const users = [
    {
    username: "george",
    email: "george@test.com",
    group: "foo",
    loggedIn: true
  },
  {
    username: "nick",
    email: "nick@test.com",
    group: "bar",
    loggedIn: false
  }
]

module.exports = {
  path: '/api/user/:username',
  method: 'GET',
  template: (pathParameters) => {
    return users.find((user) => {
      return user.username === pathParameters.username;
    })
  }
};

你觉得有什么错误吗?

【问题讨论】:

  • 在 fetchUser 上放一个断点,在 then 里面,我怀疑你的 API 没有返回有效的结果。
  • 你是对的。它正在打印:data = ""
  • 这是我在网络上得到的:http://localhost:5000/api/v1/user/undefined。考虑到模拟服务器正确返回所有内容,这很奇怪..

标签: javascript reactjs api axios state


【解决方案1】:

您没有在 getUser() 中传递“名称”参数,请尝试传递:

fetchUser = () => {
    getUser('USERNAME').then(({ data }) => {
      this.setState({ user: data });
    });
  };

【讨论】:

  • 你没有错。我试过那个。但是我如何让它动态呢?硬编码值不是一个选项。这也应该自动来自 table.row,传递给 URL 和 page-Details..
  • 所以你可以将table.row.USERNAME 作为参数传递给函数,我想这会有所帮助。
  • 我这样做:&lt;Link to={{ pathname: ``/users/${row.username}`` }} &gt; 我得到一个函数的参数。 const someName = (cell, row) =&gt; {}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-03
  • 2020-01-25
  • 2019-06-07
  • 2020-02-27
  • 2017-05-14
  • 2019-03-30
相关资源
最近更新 更多