2015-12-14 8 views
0

У меня есть простой <Trans/> React Component, который позволяет перевести ключ с некоторыми свойствами (я использую sprintf). Например:Реакция компонента внутри интерполированного компонента React

<Trans planet="World">Hello %(planet)s</Trans> 

оказывает:

Hello World

Этот вопрос при попытке вынести некоторые из этих свойств динамически, скажем, вместо "Мир" Я хочу иметь

<Trans color="blue">%(color)s planet</Trans> 

Теперь, что реагирует, сначала выводится следующее:

Здравствуйте [объект Object]

Прежде чем идти вниз по визуализации пути и правильно делают

Привет голубая планета

Это приводит к небольшому фликру показа [ объект Object] вместо отображаемого элемента. Я попытался использовать renderToString, но тогда это заставило бы меня использовать какой-то опасныйSetInnerHTML, который не работает с другими ограничениями перевода.

Любые мысли?

import React, {PropTypes, Component} from 'react' 
import {sprintf} from 'sprintf-js' 

export default class Trans extends Component { 
    translate(key, args){ 
    if(this.props.context && this.props.context[key]) key = this.props.context[key] 
    else console.error('%s is not in translated keys', key, ' - context was ', this.props.context) 
    if(typeof key === 'object' && key.singular){ 
     if(this.props.isPlural) 
     return sprintf(key.plural, args) 
     else 
     return sprintf(key.singular, args) 
    } 
    return sprintf(key, args) 
    } 

    render() { 
    return (
     <span> 
     {this.translate(this.props.children, this.props)} 
     </span> 
    ) 
    } 
} 
+0

'% (color) s planet' Что значит динамически? выглядит так же, как ' Hello% (planet) s', но с разными именами реквизита. – theodor

ответ

0

Вы должны убедиться, что #toString() метод на цветовом прототип возвращает то, что вы хотите.

+0

Извините, что я должен был включить туда весь класс, но только добавил его сейчас. Нет метода toString - его просто функция sprintf, заменяющая ключи в файлах props.children данными, переданными в качестве реквизита. –

Смежные вопросы