2016-01-07 17 views
1

我是一個總的反應福利局,但這裏是我的代碼有:凡「ExampleComponent」可以在多個地方使用如何在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」,但沒有運氣。或者我只是想解決這個問題?

+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

Louy--如何使用上面的例子來看看? –

回答

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