我想通过在任何使用Datagrid的地方添加React Flip Move来获得更高级的DataGrid。超级容易。我只需要向DatagridBody.js
添加
--- a/packages/ra-ui-materialui/src/list/DatagridBody.js
+++ b/packages/ra-ui-materialui/src/list/DatagridBody.js
@@ -3,6 +3,7 @@ import PropTypes from 'prop-types';
import shouldUpdate from 'recompose/shouldUpdate';
import TableBody from '@material-ui/core/TableBody';
import classnames from 'classnames';
+import FlipMove from 'react-flip-move';
import DatagridRow from './DatagridRow';
@@ -25,6 +26,7 @@ const DatagridBody = ({
...rest
}) => (
<TableBody className={classnames('datagrid-body', className)} {...rest}>
+ <FlipMove>
{ids.map((id, rowIndex) => (
<DatagridRow
basePath={basePath}
@@ -46,6 +48,7 @@ const DatagridBody = ({
{children}
</DatagridRow>
))}
+ </FlipMove>
</TableBody>
);
如何在不复制(并维护!)Datagrid.js的情况下覆盖React-admin的这一文件?
更新。 Apparently,装饰react-admin也是改变行为的一种方式,不需要自定义组件。
答案 0 :(得分:1)
我认为您不能只使用源代码,因为RA甚至没有导出该组件。在DatagridBody
出现的file中,导出的组件是PureDatagridBody
的{{1}}和HoC,这意味着如果扩展组件,则必须是Datagrid
因为已导出,所以必须先导入才能扩展。 PureDatagridBody
也是如此。
但是,您可以根据需要在node_module中编辑RA的源代码并重新编译以使其生效。或克隆RA,根据需要进行更改,出于相同的原因重新编译,然后将该副本当作RA使用。我个人不建议这样做,因为您不能在不失去更改的情况下更新RA,或者可以添加只能修复它们的新错误。
最好的解决方案是将功能请求作为问题提交,要求有可能将自定义的行,列(无论您在Datagrid
中喜欢使用什么作为道具传递)。