首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >React-Intl:访问嵌套组件中的formatMessage

React-Intl:访问嵌套组件中的formatMessage
EN

Stack Overflow用户
提问于 2018-02-08 00:37:04
回答 1查看 2.8K关注 0票数 2

问题很简单,我不敢相信我找不到解决方案(没有上下文)来解决像这样简单的情况。

我正在使用react-intl。我有一个带有子组件Index.jsx的App.jsx,它有一个带有CreateNewSomething.jsx的SideBar.jsx。

在每个组件中,命令

代码语言:javascript
代码运行次数:0
运行
复制
<FormattedMessage
     id="new_object.fill_title"
     defaultMessage='Please fill the "title" parameter'
/>

多亏了App.jsx提供的<IntlProvider>,才能完美地工作

不幸的是,我不能将FormattedMessage作为组件的状态值注入。

示例:

代码语言:javascript
代码运行次数:0
运行
复制
<Input 
 s={6} 
 label={label_dash_title} 
 style={style_items_form} 
 onChange={this.onDashTitleChange} 
 onKeyPress={this.newDashHandleEnterKey}
 error= { this.state.title_error }
/>

当输入字段没有填写(是必需的)时,我想打印一条错误消息。不幸的是,我不会写:

代码语言:javascript
代码运行次数:0
运行
复制
const error_message = <FormattedMessage
            id="new_dash.fill_title"
            defaultMessage='Please fill the "title" parameter'
        />

this.setState({"title_error" : error_message});

因为我得到的是[object Object],但翻译后的消息中没有任何属性。

到处搜索,我发现我必须使用this.props.intl.formatMessage({id: 'new_dash.fill_title'});

但是this.props.intl是未定义的。

我已经尝试在App.jax中包含以下内容:

代码语言:javascript
代码运行次数:0
运行
复制
import {addLocaleData, IntlProvider, injectIntl, intlShape} from 'react-intl';

但这并没有什么区别。

我尝试将intl作为属性传递给每个子组件,但intl在App.jsx中也没有定义。

我不知道我哪里错了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-12 23:47:44

该模块的Wiki解释了该方法,但没有说明如何使用。

解决方案很简单。您必须更改React组件的导出语法,然后this.props.intl将在组件中神奇地可用:

代码语言:javascript
代码运行次数:0
运行
复制
export default injectIntl(MyComponent); //WORKS!!!

不幸的是:

代码语言:javascript
代码运行次数:0
运行
复制
export default class injectIntl(MyComponent) extends React.Component //DOESN'T WORK
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48668889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档