来自自定义组件的 PrimeReact DataTable 动态列

Posted

技术标签:

【中文标题】来自自定义组件的 PrimeReact DataTable 动态列【英文标题】:PrimeReact DataTable dynamic columns from custom component 【发布时间】:2020-02-26 17:13:05 【问题描述】:

我想将 ParentComponent 的子级中给出的列动态呈现为 CustomColumn,如下所示:

import  Column  from 'primereact/column';
import  DataTable  from 'primereact/datatable';

function TetsPage(): JSX.Element 
    return (
        <ParentComponent>
            <CustomColumn field="name" header="Name" />
        </ParentComponent>
    );


export class ParentComponent extends React.Component<Props, State> 
    ................................
    render(): JSX.Element         
        // result:   <Column field="name" header="Name" />
        // expected: <Column field="name" header="Name" sortable=true/>
        return (
            <DataTable value=this.state.list>
                this.props.children
            </DataTable>
        );
     



export class CustomColumn extends React.Component<Props, State> 
    .................................
    render(): JSX.Element 
        return (
            <Column field=this.props.field header=this.props.header sortable=true />
        )
    

问题是 DataTable 组件呈现它自己的 Column 组件,而不是我的 CustomColumn,它是 的自定义/扩展版本列组件。

如何让我的 CustomColumnDataTable 中呈现为动态列?

这里是CodeSandbox

【问题讨论】:

你能把这段代码加到codesandbox或者jsfiddle里吗? @NihalSaxena 我已经添加了 CodeSandbox 的链接;) CustomColumn中自定义的部分是什么? 检查这个:codesandbox.io/s/stoic-chaplygin-ky4dt @NihalSaxena 我明白你在做什么,但CustomColumn 组件的目的是降低定义列期间的复杂性。 sortable 只是一个例子。想象一下,还会有过滤器、格式化程序……基于条件。还是谢谢你。 【参考方案1】:

请找到相同https://codesandbox.io/s/loving-snow-qlp8c的更新沙盒

这实际上是一个非常好的问题!经过大量的头撞后,我找到了解决方案。实际上,问题不在于您编写 react 组件的方式,而在于 DataTableColumn 的问题。如果你查看他们的 GITHUB 代码,你会发现它只是一个 ComponentdefaultProps。您只需将sortable 作为defaultProps 传递给您的CustomColumn 组件和TADA!它应该可以工作。

我想补充一下为什么它使用 fieldheader 的道具,这是因为当 Column 被实例化时 fieldheader 被实例化为 props 所以 @987654335 @没有来图。但是,当您从 CustomColumn 传递 sortable 时,React 无法理解它必须再次重新实例化 props,因为 Component 已经实例化并且作为 Column 组件的道具没有变化只是一个带有defaultProps 的组件。 primereact 的人以这种方式设计组件是非常蹩脚的。您也可以在他们的 GITHUB 中提出问题

【讨论】:

以上是关于来自自定义组件的 PrimeReact DataTable 动态列的主要内容,如果未能解决你的问题,请参考以下文章

为 PrimeReact 数据表自定义颜色

在 React 应用程序中使用启用 CSS 模块的 PrimeReact 主题

故事书未显示样式

PrimeReact 和样式化组件

如何使用 PrimeReact FileUpload 组件上传文件

来自 primefaces 安装问题的 Reactjs 下拉组件