Вы не можете достичь того, чего хотите. Действительно, когда вы пишете {t()}
, вы фактически предоставляете массив как дочерние для MyComponent
и, следовательно, можете map
его значения.
Однако, как только вы пишете <Translate/>
, дочерние элементы MyComponent
больше не является массивом, а элементом React (так сказать, элементом * 1035) (напечатайте children
в MyComponent
для проверки), делая ваш тест всегда ложным (поэтому он ничего не печатает)
Попробуйте позвоните <Translate/>
за пределами MyComponent
, и вы увидите «test1test2», отображаемый на вашей странице. Это больше не массив.
Вместо того, чтобы писать это:
<MyComponent>
<Translate />
</MyComponent>
Я думаю, что вы должны сделать наоборот, чтобы иметь возможность легко манипулировать тем, что исходит от Translate
и передачи MyComponent
:
<Translate>
{values => <MyComponent values={values}>}
</Translate>
с Translate
:
const Translate = ({ children }) => children(t("myText"));
и MyComponent
:
const MyComponent = ({ values }) => {
return (
Array.isArray(values) &&
values.map(val => (
<>
{`${val}__attached`}
<br />
</>
))
);
};
Live демо здесь