2016-08-31 4 views
0

Предположим, что мы имеем:синтаксического анализа тела реагировать тег

class Email extends React.Component{ 

    constructor(props){ 
     super(props); 
    } 
    validate(){ 
     return true; 
    } 
    render(){ 
     <input placeholder={this.is.what.i.ask.for.to.be.parsed.from.its.body} onFocus={this.validate} /> 
    } 
} 

Теперь Когда я resue его, я хочу позвонить:

<Email > 
    [email protected] 
</Email> 

Как разобрать [email protected] из тела Email тега.


Я знал, что это может быть сделано путем вызова <Email holder="[email protected]" /> & я должен обновить render по this.props.holder.

Таким образом, мы получаем доступ к Атрибутам Реагирования на this.props, ОДНАКО, Есть ли что-то, чтобы получить доступ к его телу со встроенным способом?

ответ

2

Если я вас правильно понял, то вы должны использовать this.props.children:

render() { 
    return (<input placeholder={this.props.children} onFocus={this.validate} />); 
} 

Как в стороне, помните, что вы должны связать this для onFocus обратного вызова! Распространенный способ сделать это из конструктора:

constructor(props) { 
    super(props); 
    this.validate = this.validate.bind(this); 
} 
+0

Спасибо и .. для последней ноты, я уже впрыснуть 'this' с помощью: ' [] .forEach ((метод) => { это [метод ] = this [method] .bind (this); }) '... и обязательно вы поймете, почему я это сделал ... :)) –

2

this.props.children дает доступ к детям в качестве компонента. В этом случае содержимое адреса электронной почты будет считаться дочерним элементом Email Компонент.

Возможно, было бы лучше использовать утилиту React.Children.only, чтобы убедиться, что существует только один ребенок.

Что-то, как это должно работать:

class Email extends React.Component{ 

    constructor(props){ 
     super(props); 
    } 
    validate(){ 
     return true; 
    } 
    render(){ 
     return <input placeholder={React.Children.only(this.props.children)} onFocus={this.validate} />; 
    } 
} 
+2

Приятно,' React.Children.only' выглядит полезно. –

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