【问题标题】:如何使用这些代码将数据放入 MuiDataTable 中?
【发布时间】:2021-06-09 01:02:39
【问题描述】:

这是我的代码,如何使用 componentDidMount() 将数据推送到 data={data} 的 MuiDataTable 中。我已经可以从我的用户集合中获取数据,但是,我对 mui 数据表了解如何将它传递到那里。这是一个 mui 数据表 -

https://www.material-ui-datatables.com/

import React, {Component} from 'react';
import MUIDataTable from "mui-datatables";
import {firestore} from './../../../firebase/firebase.utils';

const columns = ["Display Name","Email"];


class UserTable extends Component {
    
    state = { user : null}
    
    componentDidMount() {
        firestore.collection('users')
            .get()
            .then( snapshot => {
                const users = []
                snapshot.forEach(doc => {
                    const data = doc.data()
                    users.push(data)
                })
                this.setState({ users : users})
                // console.log(snapshot)
            })
        .catch(error => console.log(error))
    }   

    render() {
        return ( 
        
            <MUIDataTable
                    title={"Users"}
                    columns={columns}
                    data={data}
                    // options={options}
            />
         );
    }
  
}
 
export default UserTable;

【问题讨论】:

    标签: reactjs firebase google-cloud-firestore material-ui mui-datatable


    【解决方案1】:

    您需要传递使用列名格式化的对象数组作为键,例如
    {"Display Name": value, Email:other value}
    您需要将状态传递给构造函数,例如:

     constructor() {
        super();
        this.state = { users: [] };
      }
    

    然后您只需将this.state.users传递给 MUIDataTable 道具数据,例如:

     <MUIDataTable
            title={"Users"}
            columns={this.columns}
            data={this.state.users}
            // options={options}
          />
    

    对于我使用 axios ro 获取数据的示例,但这与 firestore 一起使用:

    import MUIDataTable from "mui-datatables";
    import { Component } from "react";
    import * as axios from "axios";
    class UserTable extends Component {
      columns = ["Display Name", "Email"];
      constructor() {
        super();
        this.state = { users: [] };
      }
    
      componentDidMount() {
        axios
          .get("/users.json")
    
          .then((res) => {
            const userData = res.data.map((u) => {
              return {
                "Display Name": u.name,
                Email: u.email
              };
            });
            console.log(userData);
            this.setState({
              users: userData
            });
          })
          .catch((error) => console.log(error));
      }
     
      render() {
        return this.state.users ? (
          <MUIDataTable
            title={"Users"}
            columns={this.columns}
            data={this.state.users}
            // options={options}
          />
        ) : (
          <div>Loading...</div>
        );
      }
    }
    
    export default UserTable;
    

    你的代码是这样的:

    import MUIDataTable from "mui-datatables";
    import { Component } from "react";
    import * as axios from "axios";
    class UserTable extends Component {
      columns = ["Display Name", "Email"];
      constructor() {
        super();
        this.state = { users: [] };
      }
    
      componentDidMount() {
     firestore.collection('users')
                .get()
                .then( snapshot => {
                    const users = []
                    snapshot.forEach(doc => {
                        const data = doc.data()
                        users.push({"Display Name":data.displayName, Email: data.email});
          
                    });
                      return users;})
                 .then(userList => this.setState({users:userList});
                  
                })
            .catch(error => console.log(error))
       
      }
    
      render() {
        return this.state.users ? (
          <MUIDataTable
            title={"Users"}
            columns={this.columns}
            data={this.state.users}
            // options={options}
          />
        ) : (
          <div>Loading...</div>
        );
      }
    }
    
    export default UserTable;
    



    更新
    在这里你可以找到一个使用 firestore 的工作 example

    【讨论】:

    • 我不知道为什么它仍然无法处理返回但如果我将 console.log(data.displayName) 可以看到数据。此外,如果我尝试使用 snapshot.map,我会收到一条错误消息,上面写着“TypeError:snapshot.map 不是函数”。所以我使用的是 snapshot.forEach
    • 你能给我们看一个console.log的快照吗,我会用你的数据结构更新我的答案
    • @JenJennie 我不熟悉 Firestore,但我找到了一个示例,并基于它更新了我的答案。抱歉.map 问题
    • 非常感谢,已经修复了。数据已显示在表格中
    猜你喜欢
    • 2016-10-20
    • 2021-10-28
    • 2019-05-31
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 2017-09-05
    相关资源
    最近更新 更多