首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ReferenceField进行反应-管理-大容量选择

使用ReferenceField进行反应-管理-大容量选择
EN

Stack Overflow用户
提问于 2018-09-17 06:30:05
回答 3查看 2.1K关注 0票数 3

在我们的应用程序中,我们尝试在ReferenceField中使用Datagrid来创建/修改/删除相关记录,如https://marmelab.com/blog/2018/07/09/react-admin-tutorials-form-for-related-records.html所示

本教程中显示的所有功能都运行良好,除了在最近的react更新中添加的批量操作之外。单击这些复选框将提供

Uncaught:_this.props.onToggleItem不是函数

我相信这是因为onToggleItem支柱通常是由List组件提供的,但是在这个应用程序中,Datagrid没有父列表组件。

在ReferenceManyField和Datagrid之间添加一个列表组件,允许在对样式进行一些更改后批量选择/删除,但是这会导致另一个问题:当前显示的页面(即记录1-10、11-20等)存储在存储中的每个资源中,因此有可能出现这样的情况:商店说我们在第2页上,而显示第2页是空的,因为只有足够多的相关项来填充一个页面。

我是不是漏掉了什么?还是目前无法在ReferenceManyField中批量选择?

代码语言:javascript
复制
export const NetworksShow = (props) => (
  <Show title={<NetworksTitle />} actions={<NetworksShowActions />} {...props}>

        <ReferenceManyField addLabel={false} target="ipid" reference="acl-network">
          <List style={{ margin: '0px -24px -16px -24px' }} {...props} actions={<NetworkACLCardActions ipid={props.id}/>} filter={{ ipid: _.has(props, 'id') ? props.id : undefined }}>
            <Datagrid hasBulkActions={true}>
              <ReferenceField label="Network" source="ipid" reference="networks">
                <TextField source="name" />
              </ReferenceField>
              <TextField label="URL" source="url" />
              <BWChip label="Action" source="wb" />
              <EditButton />
              <DeleteButton />
            </Datagrid>
          </List>
        </ReferenceManyField>
  </Show>
);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-12-06 00:32:39

作为https://github.com/marmelab/react-admin/pull/2365的一个副作用,现在可以按照问题中描述的方式使用ReferenceManyField -> List -> Datagrid。

例如,我们现在正在做以下工作:

代码语言:javascript
复制
      <ReferenceManyField addLabel={false} target="groupid" reference="users">
        <List
          style={{ margin: '0px -24px -16px -24px' }}
          filter={{ groupid: id }}
          {...props}
        >
          <Datagrid hasBulkActions>
            <LinkField label="Name" source="name" />
            <LinkField label="Username" source="email" />
            <FlexibleBooleanField label="Email" source="allowemail" />
            <ACLChip label="User Access" source="aclid" />
          </Datagrid>
        </List>
      </ReferenceManyField>

大容量操作适用于上述操作,并且任何与分页有关的问题都可以避免,因为如果当前页面上没有任何内容出现,管理员现在检查和修改分页。

票数 2
EN

Stack Overflow用户

发布于 2018-09-17 08:17:51

正如我从文档中了解到的,Datagrid只是一个迭代器“哑组件”。

它只是“显示”父元素--通常是列表(连接组件)--或者在您的例子中是ReferenceManyField -元素之前获取的内容。因此,我认为BulkActions只有在由List元素提供时才能发挥作用。

对于问题的第二部分,列表应该是顶级的,而不是在其他元素中,这就是为什么它破坏了您的分页。

票数 0
EN

Stack Overflow用户

发布于 2019-01-25 14:45:14

我实现了"DumbList“,它接收来自父组件的数据,而不是加载它本身。这解决了问题:

代码语言:javascript
复制
import React from 'react';
import { ListController } from 'ra-core';
import { ListView } from 'ra-ui-materialui/esm/list/List';

export const DumbList = props =>
  <ListController {...props}>
    {controllerProps => {
      let { data } = props
      const ids = Object.keys(data || {})
      const total = ids.length
      return <ListView
        {...props}
        // This is important, otherwise bulkActionsToolbar ends up on very top of the page
        classes={{ card: 'relative' }}
        {...Object.assign(controllerProps, { data, ids, total })} />
    }}
  </ListController>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52361910

复制
相关文章

相似问题

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