javascript - 使用来自 firebase 的数据填充 React-Table

标签 javascript reactjs axios react-table

我有一个表组件,我正尝试从 Firebase 填充它。我有 3 个字段需要填充: 名称 日期 评论

我需要它为每个条目添加一行,我已经成功添加了数据透视表。

当我尝试填充表格时,我得到的是未定义的而不是实际的条目....

索引.js

import React, { Component, Fragment, useState } from "react";
import { render } from "react-dom";
import axios from "axios";
import firebase from "firebase";

import Header from "./components/Header";
import "./style.css";

const App = () => {
  const [comment, setComment] = useState("New Comments Please");
  const [date, setDate] = useState('');

  const handleClick = e => {
    console.log("Working");
    axios
      .post(`https://lq-time-tracking.firebaseio.com/user/${user()}.json`, {
        comment, date
      })
      .then(function(response) {
        console.log(response);
      })
      .catch(function(error) {
        console.log(error);
      });
  };
  const data = () => {
    axios
      .get("https://lq-time-tracking.firebaseio.com/user.json")
      .then(function(response) {
        console.log(response);
      })
      .catch(function(error) {
        console.log(error);
      });
  };

  const user = () => document.getElementById("theDropdown").value;

  return (
    <div>
      <Header
        comment={comment}
        setComment={setComment}
        date={date}
        setDate={setDate}
        handleClick={handleClick}
        data={data}
      />
    </div>
  );
};

render(<App />, document.getElementById("root"));

header.js

import React from "react";
import styled from "styled-components";

import { BrowserRouter as Router, Switch, Route, Link } from "react-router-dom";
import Home from "./Home";

import "../style.css";

const Header = ({
  comment,
  handleClick,
  setComment,
  selectChanged,
  data,
  date,
  setDate
}) => {
  return (
    <Router>
      <nav className="navbar">
        <Link className="nav-item" to="/contact">
          Contact
        </Link>
        <Link className="nav-item" to="/about">
          Data
        </Link>
        <Link className="nav-item" to="/home">
          Home
        </Link>
      </nav>
      <Switch>
        <Route
          exact
          path="/home"
          render={(...props) => (
            <Home
              comment={comment}
              setComment={setComment}
              date={date}
              setDate={setDate}
              handleClick={handleClick}
              data={data}
            />
          )}
        />
      </Switch>
    </Router>
  );
};

export default Header;

首页.js

import React, { Fragment } from "react";
import { Container, Row, Col } from "reactstrap";

import Form from "./components/Form";
import Table from "./components/Table";

const Home = ({ comment, setComment, handleClick, data, date, setDate }) => {
  return (
    <Container>
      <Row>
        <Form
          comment={comment}
          setComment={setComment}
          date={date}
          setDate={setDate}
          handleClick={handleClick}
          data={data}
        />
      </Row>
      <Row>
        <Table />
      </Row>
    </Container>
  );
};

export default Home;

表格.js

import React from 'react';
import ReactTable from 'react-table'
import 'react-table/react-table.css'
import axios from 'axios';

const Table = (props) => {
  const getData = [axios.get("https://lq-time-tracking.firebaseio.com/user.json").then(function(response) {
        console.log(response);
      }).catch(function(error) {
        console.log(error);
      })]

const data = [{getData}];


  const columns = [{
    id: 'Name',
    Header: 'Name',
    accessor: data.user
  }, {
    Header: 'Date',
    accessor: 'Date',
  }, {
    Header: 'Comment',
    accessor:'Comment' 
  }]

  return <ReactTable
    data={...data}
    columns={columns}
    pivotBy={ ['Date', 'Name']}
  />
}


export default Table;

最佳答案

您必须修改以下代码。 API 响应不会返回到变量。

import React, { useEffect, useState } from 'react';
import ReactTable from 'react-table'
import 'react-table/react-table.css'
import axios from 'axios';

const Table = (props) => {
  const [data, setData] = useState({});

  useEffect(() => {
    axios.get("https://lq-time-tracking.firebaseio.com/user.json")
      .then(function(response) {
        setData(response.data);
      }).catch(function(error) {
        console.log(error);
      })
  }, []);

  const columns = [{
    id: 'Name',
    Header: 'Name',
    accessor: data.user
  }, {
    Header: 'Date',
    accessor: 'Date',
  }, {
    Header: 'Comment',
    accessor:'Comment' 
  }]

  return <ReactTable
    data={...data}
    columns={columns}
    pivotBy={ ['Date', 'Name']}
  />
}

export default Table;

我已经根据你的数据完成了。您必须获得响应并将响应传递给函数组件 props。

https://stackblitz.com/edit/react-dqnteu

关于javascript - 使用来自 firebase 的数据填充 React-Table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58840111/

相关文章:

javascript - 如何获取数组中的 firestore 集合响应?

javascript - HTML JavaScript While 循环哨兵页面无响应

reactjs - 无法在类组件 React.js 中使用 useState

javascript - 如何摆脱 React Router 的 Link 组件的下划线?

reactjs - 将错误响应拦截器放在 redux-axios-middleware 上

javascript - 将变量中的 JSON 传递给 HighCharts

javascript - 如何在 SuiteScript 2.0 版本中创建搜索

reactjs - React 组件重新执行错误

javascript - React 无法通过 API 调用读取未定义的属性状态

python - 属性错误: 'NoneType' object has no attribute 'save'