2017-02-24 54 views
0

我有一個組件具有一些邏輯,並且我想要相同的組件,但沒有內部的邏輯。我想構建一個沒有任何邏輯的純組件,並且我想擴展這個組件來放置原始邏輯,以便我可以在沒有任何邏輯的情況下將組件與原始邏輯或組件一起使用。這就像我需要組件的一個子集,我不想複製。我想提取的差異,所以我可以你完整的組件或只是其中的一部分。擴展組件以在另一箇中創建邏輯

我可以在反應中做到這一點,除了處理沒有邏輯的組件作爲邏輯組件的孩子嗎?最好的做法是什麼?我不認爲這是一個HOC問題。

回答

0

我想這種方法可以幫助你:https://jsfiddle.net/ginollerena/69z2wepo/71540/

const TextElement = (props) => (
     <input type="text"    
       defaultValue={props.value} 
       onChange={props.handleChange} 
       placeholder={props.placeholder}/> 
); 

const TextAreaElement = (props) => (
     <textarea    
       defaultValue={props.value} 
       onChange={props.handleChange} 
       placeholder={props.placeholder}/> 

); 

let Mixing = InnerComponent => class extends React.Component { 
    constructor(props) { 
    super(props); 
    this.state = { value :''} 
    this._handleChange = this._handleChange.bind(this); 
    } 

    _handleChange(e) { 
    const value = e.target.value; 
    this.setState({value:value}); 
    } 

    render(){ 
    return(<InnerComponent value={this.state.value} handleChange={this._handleChange} />) 
    } 

}; 

const MyTextComponent = Mixing(TextElement); 
const MyTextAreaComponent = Mixing(TextAreaElement); 



ReactDOM.render(
    <MyTextComponent />, 
    document.getElementById('container') 
); 
+0

你好,謝謝你的回答,但是這不是我要找的。這更像HOC,並且不希望這樣。讓我試着更好地解釋。想想一個Tab組件。我想要一個選項卡組件,其中更改活動選項卡的邏輯不在選項卡組件內。但我想要一個管理此活動選項卡的組件,無需邏輯地擴展此原始選項卡組件。所以我可以使用原始組件或邏輯組件?我更清楚了嗎? – Marina