У меня есть область состояния с полем описания, и с сервера я даю состояние, например. STARTED
, FINISH
, ARCHIVED
.
И я использую FormattedMessage для другого языка, например:
<FormattedMessage id = {"state." + this.props.state} defaultMessage = "defaultState" />
Это не работает.
есть какое-нибудь решение для этого случая?
Обновлено: Состояние по умолчанию - нет. Загружаю данные с сервера.
Мой компонент:
class State extends Component {
render() {
return (
<Card>
<CardBody className = "text-center">
<Button className = "bg-primary">
<FormattedMessage id = {"state." + this.props.query.findCourseUserStatus.state} defaultMessage = "defaultState" />
}
</Button>
</CardBody>
</Card>
);
}
}
export default createFragmentContainer(
State,
graphql`
fragment State_query on Query {
findCourseUserStatus(id: $courseId){
courseId
state
}
},
`
);
Где хранится ваш штат, содержащий STARTED, FINISH, ARCHIVED
? Можете ли вы показать нам свой полный компонент
enter code here
Its an old question but i would like to answer it for future reference,
Есть два пути:
для компонента класса мы можем использовать injectIntl как hoc.
import {injectIntl } from 'react-intl';
class State extends Component {
render() {
return (
<Card>
<CardBody className = "text-center">
<Button className = "bg-primary">
{this.props.intl.formatMessage({id:{"state." + this.props.query.findCourseUserStatus.state},
defaultMessage = "defaultState" })}
</Button>
</CardBody>
</Card>
);
}
}
export default injectIntl(State);
Обновленная версия response-intl предоставляет хуки injectIntl для функционального компонента.
Использование будет таким.
import {useIntl } from 'react-intl';
const State = (props) {
const intl = useIntl();
<Card>
<CardBody className = "text-center">
<Button className = "bg-primary">
{intl.formatMessage({id:{"state." + props.query.findCourseUserStatus.state},
defaultMessage = "defaultState" })}
</Button>
</CardBody>
</Card>
);
}
export default State;
есть ли синтаксическая ошибка? он говорит неожиданный токен вокруг {id: { here
какой у тебя
defaultState
?