【问题标题】:How to add a permanent filter function to a List view in react-admin?如何在 react-admin 的列表视图中添加永久过滤功能?
【发布时间】:2020-02-13 09:40:58
【问题描述】:

我是一个 react-admin 列表视图,我只想显示状态值 >2 的记录。 status 是一个自定义字段。

react-admin 文档的永久过滤器部分(请参阅https://marmelab.com/react-admin/List.html)仅指静态过滤器,它检查特定字段值,如

export const PostList = (props) => (
    <List {...props} filter={{ is_published: true }}>
        ...
    </List>
);

但我想传递一个过滤函数,例如:

export const PostList = (props) => (
    <List {...props} filter={()=>(status.id > 2)}>
        ...
    </List>
);

不幸的是,这不起作用。 status 是未知的,即使我返回静态 true 或 false,它对过滤也没有影响。

还有其他方法或解决方法吗?

【问题讨论】:

    标签: javascript reactjs react-admin


    【解决方案1】:

    React-admin 不知道您的 API 如何执行“大于”或“小于”查询(因为没有标准)。 react-admin 永久过滤器被传递给您的 dataProvider,后者将它们传递给您的 API。

    所以我建议你在你的列表中使用一个特殊的过滤键,如下:

    export const PostList = (props) => (
        <List {...props} filter={{ status_id_gt: 2 }}>
            ...
        </List>
    );
    

    然后,在您的 dataProvider 中,检测该过滤器的使用情况,并将其转换为您的 API 对“大于”过滤器的期望。

    【讨论】:

    • 该 api 无论如何都不支持过滤,它应该在客户端完成,这意味着 react-admin 需要一次获取所有记录,然后对其动态应用分页或过滤。支持吗?
    • 这实际上是另一个问题:如果给定的 api 仅支持“获取全部”(并忽略所有分页/过滤参数)和“获取一个”,如何进行 react-admin 分页和过滤
    • 您可以在 dataProvider 中进行客户端过滤和排序。重要的是 dataProvider 返回过滤和排序的数据。
    • 谢谢,我担心这就是答案。我最后使用了 filter={{ filter_type: 'id_gt_2' }} 并在数据提供者中实现了它。我希望 react_admin 以某种方式支持客户端过滤 ootb。
    猜你喜欢
    • 2013-12-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    相关资源
    最近更新 更多