2016-08-11 8 views
0

Ich habe ein Element, das Art der Vorlage ist gebaut. (z. B. Thumbnail-Container mit Bild oben und etwas in der Fußzeile mit dynamischem Inhalt zwischen ihnen) der dynamische Inhalt kann verschiedene Arten von DOM-Elementen sein, basierend auf dem Status. Ich habe es mit dem Hinzufügen von Logik in der Render-Methode, die den dynamischen Teil "injiziert". Macht das Sinn (mit Logik in der Render-Methode, die verschiedene react-Komponenten zurückgibt)? Gibt es einen besseren Weg zum Templating? (Ich bin nicht für Projekte suchen, die diese Fähigkeit hinzufügen, wollte wissen, ob es eine „reagieren Art und Weise“, so zu tun Dankgibt es eine Möglichkeit, Vorlagen in Reaktion zu haben

edit:.! Hier ist der Code, den ich bezog sich auf (Coffee):

internalContent: -> 
    switch @props.title 
    when "title1" then SomeReactFactory(props) 
    when "title2" then SomeOtherReactFactory(props) 

render -> 
    ... 
    DOM.div 
    className: 'panel' 
    @internalContent() 

die internalContent() Methode dynamisch fügt einige Komponenten Reagieren auf der Basis der Stütze

+2

Ja, das macht Sinn. Wenn Sie Code schreiben würden, wäre es einfacher, Sie gezielt zu beraten - aber das ist eine gängige Praxis. –

+0

Können Sie Ihren Code posten? – Aaron

+0

ich denke, Sie beschreiben HOCs in reagieren. Nachschlagen – Deadfish

Antwort

0

Dies ist die Art und Weise .. Reagieren ist Und Sie sollten davon Gebrauch machen, spezifische Domain zu zielen.

zum Beispiel ein Knopf in Reagieren coul d wie folgt geschrieben werden:

const MyButton = ({ text, type = "normal", color = "blue", onClick }) => { 
    return (
     <button 
     onClick={onClick} 
     style={{backgroundColor: color }} 
     className={"my-button my-button--type" + type}> 
      {text} 
    </button>); 
}; 

Oder eine Layout-Komponente:

const MyLayout = ({side, nav, main}) => { 
    return (
     <div className="container"> 
     <nav>{nave}</nav> 
     <aside>{side}</aside> 
     <div className="main">{main}</div> 
     </div> 
    ) 
} 

Jetzt können Sie Verbund es zum Beispiel wie folgt aus:

class App extends Component { 
    ... 

    render() { 
    <MyLayout 
     nav={<MyNav/>} 
     side={<MySideBar items={...} />} 
     main={<MyButton onClick={this.onClick} text="Main Button"} 
    /> 
    } 
} 

Dont versuchen, alles in einem großen zu packen Eine Komponente, die alles macht. Der Trick in React besteht darin, kleine wiederverwendbare Komponenten zu erstellen und sie zu kombinieren.

Sie können auch eine Reihe von Komponenten erstellen, die Sie in vielen Projekten verwenden können.

+0

Hi @webdeb bearbeitet. Danke für die Antwort. das macht Sinn für mich. Wenn Sie sich meine editierte Frage ansehen (ich habe den Code hinzugefügt), bezog ich mich auf die Logik, die ich in der 'render' Methode habe, die in Ihrem Beispiel wäre eine Methode mit Logik in Ihrem' main' zu haben (ersetzt die '

+0

@RoyZinn Ja, du kannst es so machen Nachdem du das Rendered Markup/Code an anderer Stelle wiederverwenden kannst, kannst du ein separate Komponente – webdeb

Verwandte Themen