【发布时间】:2019-10-22 10:26:34
【问题描述】:
我想介绍一个多语言系统。 我有一个函数组件,它根据所选语言(来自 Context API)返回特定元素的翻译。
在我将翻译后的元素放入表单(选项值、占位符等)之前一切正常 - 然后它显示为 [object object]。
这就是产生 2 个问题的地方:
是否可以将此组件作为字符串返回,HTML 表单会接受哪些内容?
是否可以将上下文消费者应用于纯 JS 函数,因此它不返回 React 组件,而是返回原始值?
翻译组件:
const Translation = ({ element }) => {
let translation;
return (
<LanguageConsumer>
{({ language }) => {
switch (language) {
case "pl":
translation = plTranslation;
break;
case "en":
translation = enTranslation;
break;
default:
translation = enTranslation;
}
return translation[element];
}}
</LanguageConsumer>
);
};
例子:
<option value="en">
<Translation element="globalLanguageEnglish" />
</option>
提前感谢您的帮助。
【问题讨论】:
-
你能分享一些代码吗? React 可以正确渲染
string对象。您很可能尝试渲染context对象或其他东西。 -
没有代码/上下文很难提供帮助。但是,从您所描述的内容来看,您似乎想根据其名称动态呈现组件。
const ComponentToRender = 'MyComponent';和使用它就像<ComponentToRender />。因此,如果您有条件元素要渲染,您可以只传递组件string名称然后渲染它 -
对不起,我添加了一些代码。我想问题是我要返回整个消费者,而不仅仅是来自翻译对象的字符串元素。
-
还是不行。它总是以形式给出[object object]。即使您像
const Value = () => "value"那样做某事并将其传递给像<input type="text" placeholder={<Value />}这样的输入占位符。 :-( -
在这种情况下,您只需将
Value称为function,而不是将其呈现为component:<input type="text" placeholder={Value()} />
标签: javascript html reactjs forms placeholder