2016-01-07 2 views
1

Я всего реагируют NEWB, но вот код у меня есть:Как повторно использовать этот небольшой блок кода в React.js?

var ExampleComponent = React.createClass({ 
    getInitialState: function() { 
    return {close: false}; 
    }, 
    handleClick: function(event) { 
    this.setState({close: !this.state.close}); 
    }, 
}); 

    var ButtonThing = React.createClass({ 
    <ExampleComponent />, 
    render: function() { 
    <div> yo </div> 
    ); 
    } 
}); 

Где «ExampleComponent» может быть использован в нескольких местах? Я пробовал то, что у меня выше, и просто вставлял «ExampleComponent» прямо, но не повезло. Или я просто собираюсь сделать это неправильно?

+0

Также посмотрите на [реагировать штемпеля] (HTTPS : //github.com/stampit-org/react-stamp) для гораздо более сложной и мощной (но простой в использовании) альтернативы. –

+1

Вы не должны использовать mixins btw. Вместо этого используйте компоненты более высокого порядка. [Прочтите это.] (Https://medium.com/@dan_abramov/mixins-are-dead-long-live-higher-order-components-94a0d2f9e750#.v7may2yya) – Louy

+0

Луи - как это выглядело бы, используя пример выше? –

ответ

1

Повторное использование кода в реакции облегчается концепцией, называемой mixins.

react docs дайте краткий пример.

В вашем случае

var exampleMixin = { 
    getInitialState: function() { 
    return {close: false}; 
    }, 
    handleClick: function(event) { 
    this.setState({close: !this.state.close}); 
    } 
} 
var ButtonThing = React.createClass({ 
    mixins: [exampleMixin], // Use the mixin 
    render: function() { 
    return (<div> yo </div>); 
    } 
}); 
+1

ах отлично! благодаря! –

1

Как вы используете React.createClass вы можете попробовать использовать mixins, как этот

var ComponentStateMixin = { 
    getInitialState: function() { 
    return { close: false }; 
    }, 

    handleClick: function(event) { 
    this.setState({ close: !this.state.close }); 
    } 
}; 

var ButtonThing = React.createClass({ 
    mixins: [ ComponentStateMixin ], 
    render: function() { 
    return <div> 
     <button onClick={ this.handleClick }>Close</button> 
     <p>{ 'ButtonThing state:: ' + this.state.close }</p> 
    </div>; 
    } 
}); 

var Modal = React.createClass({ 
    mixins: [ ComponentStateMixin ], 
    render: function() { 
    return <div> 
     <button onClick={ this.handleClick }>Close Modal</button> 
     <p>{ ' Modal state:: ' + this.state.close }</p> 
    </div>; 
    } 
}); 

Example

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