如何在react-admin中仅覆盖一个子文件?

时间:2018-07-11 14:03:42

标签: reactjs override react-admin

我想通过在任何使用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也是改变行为的一种方式,不需要自定义组件。

1 个答案:

答案 0 :(得分:1)

我认为您不能只使用源代码,因为RA甚至没有导出该组件。在DatagridBody出现的file中,导出的组件是PureDatagridBody的{​​{1}}和HoC,这意味着如果扩展组件,则必须是Datagrid因为已导出,所以必须先导入才能扩展。 PureDatagridBody也是如此。

但是,您可以根据需要在node_module中编辑RA的源代码并重新编译以使其生效。或克隆RA,根据需要进行更改,出于相同的原因重新编译,然后将该副本当作RA使用。我个人不建议这样做,因为您不能在不失去更改的情况下更新RA,或者可以添加只能修复它们的新错误。

最好的解决方案是将功能请求作为问题提交,要求有可能将自定义的行,列(无论您在Datagrid中喜欢使用什么作为道具传递)。