MUIDataTable ReactJS 中的标签文本未更新
Label text not updating in MUIDataTable ReactJS
我想在 mui 数据表中添加多语言选项。我可以更改翻译,但是当我想更改语言时,我尝试给另一个对象提供其他翻译(这个对象如果我做控制台日志我可以看到更改)但是标签文本没有改变。
我使用 contextProvider 来更改所选语言,然后获取带有翻译的特定词典。
是一个 class 组件,所以我用正确的提供者做了一个静态 contextType。
有没有可能用其他选项或类似的东西重新渲染元素?
options = {
textLabels: this.context.translation.dataTables.textLabels
};
return(
<MUIDataTable
title={this.context.language.value}
data={data}
columns={columns}
options={options}
/>
);
你可以强制 React 组件渲染:
- 有多种方法可以强制 React 组件渲染,但它们本质上是相同的。第一个是使用
this.forceUpdate()
,它会跳过 shouldComponentUpdate
:
someMethod() {
// Force rendering without state change...
this.forceUpdate();
}
- 假设您的组件有一个状态,您还可以调用以下内容:
someMethod() {
// Force rendering with a simulated state change
this.setState({ state: this.state });
}
在选项中使用customRowRender函数并根据语言
操作table
使用自定义函数覆盖默认行呈现。
customRowRender(data, dataIndex, rowIndex) => 反应组件
re-render Mui-Datatables 的最佳方法是更新 table
的密钥
键={this.context.language.value}
<MUIDataTable
key={this.context.language.value}
title={this.context.language.value}
data={data}
columns={columns}
options={options}
/>
在 MUIDataTable 中,我们可以在创建列时通过在 MUIDataTableColumnDef 选项中提供标签来覆盖标签名称。
示例:
const columns: MUIDataTableColumnDef[] = [
{
name: 'Id',
label: 'ID',
options: {
download: false,
customBodyRenderLite: (index: number) => {
const desc: Description = evenMoreAbout[index]
return <BasicInfo obj={desc} setIconClicked={setIconClicked} />
}
}
},
{
name: 'id',
label: 'ID',
options: {
display: 'excluded',
download: true,
customBodyRender: desc => desc.id
}
}]
即使我们仍然想使用 customHeadLabelRender 在某些数据条件下覆盖标签名称...我们可以像下面的示例一样
const columns: MUIDataTableColumnDef[] = [
{
name: 'Id',
label: '',
options: {
download: false,
customBodyRenderLite: (index: number) => {
const desc: Description = evenMoreAbout[index]
return <BasicInfo obj={desc} setIconClicked={setIconClicked} />
},
customHeadLabelRender: (dataIndex: number, rowIndex: number) => {
return 'ID';
}
}
}
]
我想在 mui 数据表中添加多语言选项。我可以更改翻译,但是当我想更改语言时,我尝试给另一个对象提供其他翻译(这个对象如果我做控制台日志我可以看到更改)但是标签文本没有改变。
我使用 contextProvider 来更改所选语言,然后获取带有翻译的特定词典。
是一个 class 组件,所以我用正确的提供者做了一个静态 contextType。
有没有可能用其他选项或类似的东西重新渲染元素?
options = {
textLabels: this.context.translation.dataTables.textLabels
};
return(
<MUIDataTable
title={this.context.language.value}
data={data}
columns={columns}
options={options}
/>
);
你可以强制 React 组件渲染:
- 有多种方法可以强制 React 组件渲染,但它们本质上是相同的。第一个是使用
this.forceUpdate()
,它会跳过shouldComponentUpdate
:
someMethod() {
// Force rendering without state change...
this.forceUpdate();
}
- 假设您的组件有一个状态,您还可以调用以下内容:
someMethod() {
// Force rendering with a simulated state change
this.setState({ state: this.state });
}
在选项中使用customRowRender函数并根据语言
操作table使用自定义函数覆盖默认行呈现。
customRowRender(data, dataIndex, rowIndex) => 反应组件
re-render Mui-Datatables 的最佳方法是更新 table
的密钥键={this.context.language.value}
<MUIDataTable
key={this.context.language.value}
title={this.context.language.value}
data={data}
columns={columns}
options={options}
/>
在 MUIDataTable 中,我们可以在创建列时通过在 MUIDataTableColumnDef 选项中提供标签来覆盖标签名称。
示例:
const columns: MUIDataTableColumnDef[] = [
{
name: 'Id',
label: 'ID',
options: {
download: false,
customBodyRenderLite: (index: number) => {
const desc: Description = evenMoreAbout[index]
return <BasicInfo obj={desc} setIconClicked={setIconClicked} />
}
}
},
{
name: 'id',
label: 'ID',
options: {
display: 'excluded',
download: true,
customBodyRender: desc => desc.id
}
}]
即使我们仍然想使用 customHeadLabelRender 在某些数据条件下覆盖标签名称...我们可以像下面的示例一样
const columns: MUIDataTableColumnDef[] = [
{
name: 'Id',
label: '',
options: {
download: false,
customBodyRenderLite: (index: number) => {
const desc: Description = evenMoreAbout[index]
return <BasicInfo obj={desc} setIconClicked={setIconClicked} />
},
customHeadLabelRender: (dataIndex: number, rowIndex: number) => {
return 'ID';
}
}
}
]