首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未填充的资料UI资料

未填充的资料UI资料
EN

Stack Overflow用户
提问于 2021-12-08 20:51:39
回答 1查看 1.2K关注 0票数 0

我遇到了一个很难搞清楚的问题。我正在使用物质UI数据,但我似乎无法让它填充数据,我也不明白为什么。当我查看我的组件分析器时,我可以看到我试图显示的数据就在那里,所以我无法理解为什么没有行。

我正在使用useEffect()从我的管理组件中的快捷服务器获取数据,然后将数据反馈到我的EventTable组件。我的状态存储在一个MobX存储中,您可以看到,我正在每个组件的顶部解构。我是比较新的反应,所以还是习惯了模式,也许我错过了什么愚蠢的东西?下面是一些关键片段。

EventTable组件

代码语言:javascript
复制
import React from 'react'
import { useStore } from '../../../Stores/store';
import { DataGrid, GridActionsCellItem, GridColDef, GridRowParams, GridRowsProp } from '@mui/x-data-grid';
import { Edit } from '@mui/icons-material';

export default function EventTable() {
    const { generalStore} = useStore();
    const { events, setSelectedEvent } = generalStore;

    let rows: GridRowsProp = [...events];

    const columns: GridColDef[] = React.useMemo(() => [
        { field: 'name', headerName: 'Title', flex: 1},
        { field: 'date_time', headerName: 'Date', flex:1 },
        
        ], []);

    return (
        <DataGrid rows={rows} columns={columns} autoPageSize={true} autoHeight={true} />
    )
}

管理组件

代码语言:javascript
复制
import React, { useEffect } from 'react'
import { useStore } from '../../Stores/store'
import EventForm from './EventForm/EventForm';
import EventTable from './EventForm/EventTable';
import './Management.css'
import NewsForm from './NewsForm/NewsForm';

export default function Management() {
    const { generalStore } = useStore();
    const { haveNewsAndEvents, getNewsAndEvents, updateHaveNewsAndEvents, setIsManagement } = generalStore;


    useEffect(() => {
        setIsManagement(true);
        if(!haveNewsAndEvents){
            getNewsAndEvents();
            updateHaveNewsAndEvents(true);
        } 
    }, [haveNewsAndEvents]);

    return (
        <div >
            <div className="paper">
                <div className="newsEventForm">
                    <h2>Event Management</h2>
                    <EventForm />
                    <EventTable />
                </div>
                <div className="newsEventForm">
                    <h2>News Management</h2>
                    <NewsForm />
                </div>
            </div>
        </div>
    )
}

任何帮助都是非常感谢的

EN

回答 1

Stack Overflow用户

发布于 2021-12-08 21:21:41

我想你可能对数据流有问题。首先,这是一个假设,因为我没有看到完整的画面。

代码语言:javascript
复制
getNewsAndEvents();
updateHaveNewsAndEvents(true);

在这里,我假设getNewsAndEvents操作会触发一个异步调用,并且看起来就在调用之后的下一行中设置了haveNewsAndEvents。因此,管理组件是在没有事件的情况下呈现的。

调用完成后,可以通过移动updateHaveNewsAndEvents来解决这个问题。

或者你可以做以下几件事:

代码语言:javascript
复制
export default function EventTable() {
  const [rows, setRows] = useState([]);
  const { generalStore} = useStore();
  const { events, setSelectedEvent } = generalStore;
  let rows = [];

  useEffect(() => setRows([...events]), [events]);

  return (
    <DataGrid rows={rows} columns={columns} autoPageSize={true} autoHeight={true} />
)
}

EventTable组件的问题是它对状态变化没有反应。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70281565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档