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
Javascript MUIDatable ReactJS中的标签文本未更新_Javascript_Reactjs_Material Ui_Mui Datatable - Fatal编程技术网

Javascript MUIDatable ReactJS中的标签文本未更新

Javascript MUIDatable ReactJS中的标签文本未更新,javascript,reactjs,material-ui,mui-datatable,Javascript,Reactjs,Material Ui,Mui Datatable,我想在mui数据表中添加多语言选项。我可以更改翻译,但当我想更改语言时,我尝试使用其他翻译提供另一个对象(如果我使用控制台日志,我可以看到该对象的更改),但标签文本不会更改 我使用contextProvider来更改所选的语言,然后获得带有翻译的特定词典 是一个类组件,因此我使用正确的提供程序创建了一个静态contextType 是否有可能使用其他选项或类似的东西重新渲染元素 options = { textLabels: this.context.translation.dataTables

我想在mui数据表中添加多语言选项。我可以更改翻译,但当我想更改语言时,我尝试使用其他翻译提供另一个对象(如果我使用控制台日志,我可以看到该对象的更改),但标签文本不会更改

我使用contextProvider来更改所选的语言,然后获得带有翻译的特定词典

是一个类组件,因此我使用正确的提供程序创建了一个静态contextType

是否有可能使用其他选项或类似的东西重新渲染元素

options = {
 textLabels: this.context.translation.dataTables.textLabels
};

return(
 <MUIDataTable
   title={this.context.language.value}
   data={data}
   columns={columns}
   options={options}
 />
);
选项={
textLabels:this.context.translation.dataTables.textLabels
};
返回(
);

您可以强制React组件渲染:

  • 强制React组件渲染的方法有多种,但本质上是相同的。第一种方法是使用
    this.forceUpdate()
    ,它跳过
    shouldComponentUpdate
someMethod(){
//强制渲染而不更改状态。。。
这个.forceUpdate();
}
  • 假设您的组件具有状态,您还可以调用以下命令:
someMethod(){
//使用模拟状态更改强制渲染
this.setState({state:this.state});
}

使用选项中的customRowRender函数,并根据语言操作表

使用自定义函数替代默认行呈现


customRowRender(数据、数据索引、行索引)=>React组件

重新呈现Mui数据表的最佳方法

key={this.context.language.value}


在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
        }
    }]
const columns:muidatablecolumndef[]=[
{
名称:“Id”,
标签:“ID”,
选项:{
下载:错,
customBodyRenderLite:(索引:编号)=>{
const desc:Description=evenMoreAbout[index]
返回
}
}
},
{
名称:“id”,
标签:“ID”,
选项:{
显示:“已排除”,
下载:对,
customBodyRender:desc=>desc.id
}
}]
即使我们仍然希望在使用CustomRender的某些数据条件下超越标签名称。。。我们可以像下面的例子

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';
            }
        }
    }
]
const columns:muidatablecolumndef[]=[
{
名称:“Id”,
标签:“”,
选项:{
下载:错,
customBodyRenderLite:(索引:编号)=>{
const desc:Description=evenMoreAbout[index]
返回
},
customIndex:number,rowIndex:number)=>{
返回“ID”;
}
}
}
]

谢谢您的回答!。但是各州都在运作,我试着改变数据和标题,正如你所看到的,最后一个,随着上下文的变化而改变,它也在运作。但是我不能改变选项,我不明白为什么。谢谢你的回答!我只想更改textLabels选项。我可以更改数据道具和标题道具。但我不能改变选择道具