Reactjs 来自自定义组件的PrimeReact DataTable动态列
我希望将ParentComponent的Children中给定的列动态呈现为CustomColumns,如下所示: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
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只是一个例子。想象一下,还会有过滤器、格式化程序。。。基于条件。无论如何,谢谢你。