Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 来自自定义组件的PrimeReact DataTable动态列_Reactjs_Primereact - Fatal编程技术网

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

Reactjs 来自自定义组件的PrimeReact DataTable动态列,reactjs,primereact,Reactjs,Primereact,我希望将ParentComponent的Children中给定的列动态呈现为CustomColumns,如下所示: import { Column } from 'primereact/column'; import { DataTable } from 'primereact/datatable'; function TetsPage(): JSX.Element { return ( <ParentComponent> <C

我希望将ParentComponent的Children中给定的列动态呈现为CustomColumns,如下所示:

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组件呈现自己的列组件,而不是my CustomColumn,后者是列组件的自定义/扩展版本

如何在DataTable中将CustomColumns呈现为动态列


这是

请找到更新的沙盒

这其实是一个很好的问题!经过一番努力,我找到了解决办法。实际上,问题不是您编写react组件的方式,而是DataTable列的问题。如果你查看他们的GITHUB代码,你会发现它只是一个带有defaultProps的组件。您只需要将sortable作为defaultProps传递给CustomColumn组件和TADA!它应该会起作用


我想补充一下它为什么要使用字段和标题的道具,这是因为当列被实例化时,字段和标题是用道具实例化的,所以defaultProps不会出现在图片中。但当您从CustomColumn传递sortable时,React无法理解它必须再次重新实例化道具,因为组件已经实例化,并且道具没有任何更改,因为Column组件只是一个带有defaultProps的组件。以这种方式设计组件对primereact人员来说是非常蹩脚的。您也可以在他们的GITHUB中提出问题

请找到更新的沙盒

这其实是一个很好的问题!经过一番努力,我找到了解决办法。实际上,问题不是您编写react组件的方式,而是DataTable列的问题。如果你查看他们的GITHUB代码,你会发现它只是一个带有defaultProps的组件。您只需要将sortable作为defaultProps传递给CustomColumn组件和TADA!它应该会起作用


我想补充一下它为什么要使用字段和标题的道具,这是因为当列被实例化时,字段和标题是用道具实例化的,所以defaultProps不会出现在图片中。但当您从CustomColumn传递sortable时,React无法理解它必须再次重新实例化道具,因为组件已经实例化,并且道具没有任何更改,因为Column组件只是一个带有defaultProps的组件。以这种方式设计组件对primereact人员来说是非常蹩脚的。你也可以在他们的GITHUB中提出问题

你可以在codesandbox或JSFIDLE中添加此代码吗?@NihalSaxena我已经添加了codesandbox的链接;CustomColumn中的自定义部分是什么?请检查:@NihalSaxena我知道您试图做什么,但CustomColumn组件的目的是降低定义列的复杂性。sortable只是一个例子。想象一下,还会有过滤器、格式化程序。。。基于条件。无论如何谢谢你。你能在codesandbox或JSFIDLE中添加此代码吗?@NihalSaxena我已经添加了codesandbox的链接;CustomColumn中的自定义部分是什么?请检查:@NihalSaxena我知道您试图做什么,但CustomColumn组件的目的是降低定义列的复杂性。sortable只是一个例子。想象一下,还会有过滤器、格式化程序。。。基于条件。无论如何,谢谢你。