javascript - 从 componentDidMount 中的 api 获取数据返回 null

标签 javascript reactjs api

我正在尝试在 React 的 componentDidMount 生命周期方法中获取数据,但我没有得到它。

我的方法是:

  componentDidMount() {
    const { taskId } = this.props
    getTask(taskId)
    .then(data => {
        console.log(data);
      this.setState({task: data});
    })
  }

我的 API 是:

  export const getTask = (unique_id) =>  {
  console.log(unique_id)
    return fetch('https://punctual-backend-staging.herokuapp.com/api/v1/homeowner_tasks/'+ unique_id).then(res => { 
    return res.json();
    });
  };

这是我的整个组件:

import React, { Component } from 'react'
import { getTask } from '../../modules/clients';
import ClientTaskShow from '../../components/tasks/ClientTaskShow'

class ClientTaskShowContainer extends Component {
  constructor(props) {
    super(props)

    this.state = {
      messageModalOpen: false,
      selectedPartnerId: null,
      task:{}
    }
  }

  componentDidMount() {
      console.log("hello")
    const { taskId } = this.props
    getTask(taskId)
    .then(data => {
        console.log(data);
      this.setState({task: data});
    })
  }
  render() {
    const taskSelected = this.state.task;
    console.log(taskSelected)
        return (
            <ClientTaskShow 
                task={taskSelected}
            />
        )   
  }
}

export default ClientTaskShowContainer;

调用 clienttaskShowContainer 的代码:

import React from 'react'
import Head from 'next/head'
import Layout from '../../components/Layout'
import ClientTaskShowContainer from '../../containers/tasks/ClientTaskShowContainer'
import requireAuth from '../../lib/requireAuth'

const ClientTasksShow = ({ query }) => {
  const { taskId } = query
  return (
    <Layout fluid fullHeight clientTaskHeader='true'>
      <Head>
        <title>Client Task Details | Punctual</title>
      </Head>
      <ClientTaskShowContainer taskId={taskId} />
    </Layout>
  )
}

ClientTasksShow.getInitialProps = async ({ query }) => ({
    query
  })

export default requireAuth(ClientTasksShow)

我认为它甚至没有触及 API。虽然我重新启动服务器后它就出现了,但不会再出现了。我无法复制该问题。 在某些网站上,我发现我们应该使用 .then 进行 API 调用,其他网站则说我们无法在 componentDidMount 中的 API 调用中传递边界。这个问题的具体解决方案是什么。请帮忙。提前致谢。

最佳答案

此代码正在运行

//调用组件

import React from "react";
import CallComp from "./CallComp";
import ReactDOM from "react-dom";

function App() {
  return (
    <div className="App">
      <CallComp taskId={"7693fbf81a33"} />
    </div>
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

//子组件

import React, { Component } from "react";
import ClientTaskShow from "./ClientTaskShow";

class ClientTaskShowContainer extends Component {
  constructor(props) {
    super(props);
    this.state = {
      task: {}
    };
  }

  componentDidMount() {
    const { taskId } = this.props;
    fetch(
      `https://punctual-backend-staging.herokuapp.com/api/v1/homeowner_tasks/${taskId}`
    )
      .then(response => response.json())
      .then(data => this.setState({ task: data }))
      .catch(error => console.log("the error is", error));
  }
  render() {
    const taskSelected = this.state.task;
    console.log("task selected is ", taskSelected);
    return (
      <div>
        {Object.keys(taskSelected).length ? (
          <ClientTaskShow task={taskSelected} />
        ) : (
          <div>No data to show</div>
        )}
      </div>
    );
  }
}

export default ClientTaskShowContainer;

//演示ClientTaskShow

import React from "react";

const ClientTaskShow = ({ task }) => {
  return <h1>{task.unique_code}</h1>;
};

export default ClientTaskShow;

关于javascript - 从 componentDidMount 中的 api 获取数据返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55740213/

相关文章:

javascript - 如何获得最具体的 X 使得 y instanceof X 为真?

javascript - 使用 Material Design Lite 错误确认密码验证

php - 美味的 API 认证

iphone - UISearchBar 在每次输入字母时调用 API,而不是在单击搜索按钮时调用 API

javascript - 在 linkWithCredential() 上触发 Firebase Cloud Function

javascript - 过去 7 天内添加的用户数

javascript - 在 React.js 中滚动显示图标

javascript - React Router - 添加变量路由时样式表被标记为 "text/html"(/:userId)

javascript - 在 react 中触发 onClick 按键事件?

django - 如何在 Perform_create 中使用 Validator 来限制 Django Rest Framework 的图像上传大小?