admin-on-rest "Translate is not a function" 在遵循文档中的示例之后
admin-on-rest "Translate is not a function" after following example in documentation
在遵循文档中的 i18n 示例之后,我尝试在我的代码中插入该示例,如下所示:
import React, { Component } from 'react';
import {
List,
Datagrid,
TextField,
NumberField,
DateField,
Create,
Edit,
SimpleForm,
TextInput,
SelectInput,
SelectArrayInput,
NumberInput,
DateInput,
EditButton,
DisabledInput,
TabbedForm,
FormTab,
ReferenceManyField,
BooleanInput,
ViewTitle,
translate
} from 'admin-on-rest';
import { Card, CardHeader, DropDownMenu, MenuItem } from 'material-ui';
class MyComponent extends Component {
constructor(props) {
super(props);
//State for each DropDownMenu
this.state = {
tableValue: null,
operationTypeValue: null
}
}
handleValues = (label, event, index, value) => {
switch(label) {
case 'operation.table':
this.setState({tableValue: value});
break;
case 'operation.type':
this.setState({operationTypeValue: value});
break;
default:
break;
}
}
render() {
const { translate } = this.props;
return (
<Card>
<ViewTitle title={translate('resources.datasources.operation.title')}/>
<CardHeader subtitle={translate('resources.datasources.operation.info')} />
<DropDownMenu name="operation.table" value={this.state.tableValue} onChange={this.handleValues.bind(this, "operation.table")} >
<MenuItem value={0} primaryText={translate('resources.datasources.operation.table')} label={translate('resources.datasources.operation.table')} />
<MenuItem value={1} primaryText="table1" label="table1" />
<MenuItem value={2} primaryText="table2" label="table2" />
<MenuItem value={3} primaryText="table3" label="table3" />
</DropDownMenu>
<br/>
<DropDownMenu name="operation.type" value={this.state.operationTypeValue} onChange={this.handleValues.bind(this, "operation.type")} >
<MenuItem value={0} primaryText={translate('resources.datasources.operation.type')} label={translate('resources.datasources.operation.type')} />
<MenuItem value={1} primaryText="table1" label="table1" />
</DropDownMenu>
</Card>
);
}
}
export default translate(MyComponent);
如您所见,这与文档中的示例相同,适用于有状态组件。
但是,当我启动我的应用程序时,出现了这个错误:
TypeError: translate is not a function
更奇怪的是版本之间的不一致。在 1.3.3 版本中,我可以毫无问题地看到这个渲染的组件;而在 1.4 版中会发生这种情况。
知道这个问题可能是什么吗?
最佳,
在我的项目中它不是const { translate } = this.context;
相反,它是 const { translate } = this.context;
我认为这应该有用,如果不行,你能post你的 this
里有什么吗?
我解决了这个问题。
毕竟,问题不在于组件本身,而是 translate
函数未在 props
中定义,而是在名为 translate
的 属性 中定义。
我修复了调用 MyComponent
的文件,现在问题已解决。
感谢大家的帮助。
在遵循文档中的 i18n 示例之后,我尝试在我的代码中插入该示例,如下所示:
import React, { Component } from 'react';
import {
List,
Datagrid,
TextField,
NumberField,
DateField,
Create,
Edit,
SimpleForm,
TextInput,
SelectInput,
SelectArrayInput,
NumberInput,
DateInput,
EditButton,
DisabledInput,
TabbedForm,
FormTab,
ReferenceManyField,
BooleanInput,
ViewTitle,
translate
} from 'admin-on-rest';
import { Card, CardHeader, DropDownMenu, MenuItem } from 'material-ui';
class MyComponent extends Component {
constructor(props) {
super(props);
//State for each DropDownMenu
this.state = {
tableValue: null,
operationTypeValue: null
}
}
handleValues = (label, event, index, value) => {
switch(label) {
case 'operation.table':
this.setState({tableValue: value});
break;
case 'operation.type':
this.setState({operationTypeValue: value});
break;
default:
break;
}
}
render() {
const { translate } = this.props;
return (
<Card>
<ViewTitle title={translate('resources.datasources.operation.title')}/>
<CardHeader subtitle={translate('resources.datasources.operation.info')} />
<DropDownMenu name="operation.table" value={this.state.tableValue} onChange={this.handleValues.bind(this, "operation.table")} >
<MenuItem value={0} primaryText={translate('resources.datasources.operation.table')} label={translate('resources.datasources.operation.table')} />
<MenuItem value={1} primaryText="table1" label="table1" />
<MenuItem value={2} primaryText="table2" label="table2" />
<MenuItem value={3} primaryText="table3" label="table3" />
</DropDownMenu>
<br/>
<DropDownMenu name="operation.type" value={this.state.operationTypeValue} onChange={this.handleValues.bind(this, "operation.type")} >
<MenuItem value={0} primaryText={translate('resources.datasources.operation.type')} label={translate('resources.datasources.operation.type')} />
<MenuItem value={1} primaryText="table1" label="table1" />
</DropDownMenu>
</Card>
);
}
}
export default translate(MyComponent);
如您所见,这与文档中的示例相同,适用于有状态组件。
但是,当我启动我的应用程序时,出现了这个错误:
TypeError: translate is not a function
更奇怪的是版本之间的不一致。在 1.3.3 版本中,我可以毫无问题地看到这个渲染的组件;而在 1.4 版中会发生这种情况。
知道这个问题可能是什么吗?
最佳,
在我的项目中它不是const { translate } = this.context;
相反,它是 const { translate } = this.context;
我认为这应该有用,如果不行,你能post你的 this
里有什么吗?
我解决了这个问题。
毕竟,问题不在于组件本身,而是 translate
函数未在 props
中定义,而是在名为 translate
的 属性 中定义。
我修复了调用 MyComponent
的文件,现在问题已解决。
感谢大家的帮助。