2017-04-16 2 views
0

Wie kann ich ein verschachteltes Schubladenlayout implementieren?Verschachtelte Schublade/Layout in React Toolbox

LOGO | Nav-Items-Here 
------------------------- 
Page Header 
------------------------- 
Drawer | Content 
/Sidebar| 
     | 
     | 

Ich habe versucht, ein verschachteltes Layout zu verwenden, aber es funktioniert nicht. Die Schublade ist immer an der Oberseite des Fensters befestigt. Mein Code sieht wie folgt aus (vereinfacht Komplexität zu entfernen wie Router reagieren):

 <Layout> 
     <Panel> 
      <DomainPage /> 
     </Panel> 
     </Layout> 

DomainPage

<div> 
    <header styleName="pageHeader.header pageHeader.headerNoBorder"> 
     <h1 styleName="pageHeader.headerText">{this.props.domain.get("name")}</h1> 
    </header> 

    <Tabs theme={theme} index={this.state.index} onChange={this.handleTabChange}> 
     <Tab label="Intents"> 
     <DomainIntentsTab /> 
     </Tab> 
     <!-- ... --> 
    </Tabs> 
    </div> 

DomainIntentsTab

<Layout> 
    <Panel> 
     <NavDrawer pinned active> 
     Test 
     </NavDrawer> 
    </Panel> 
    </Layout> 

Antwort

1

testen Code unten in react-toolbox playground

class LayoutTest extends React.Component { 
state = { 
    drawerActive: false 
}; 

toggleDrawerActive =() => { 
    this.setState({ drawerActive: !this.state.drawerActive }); 
}; 

render() { 
    return (
     <Layout> 
     <Panel> 
      {/* DomainPage */} 
      <div> 
      <header> 
       <h1>Header</h1> 
      </header> 
      <Tabs> 
       <Tab label="Intents"> 
       {/* DomainIntentsTab */} 
       <Layout> 
        <Panel> 
        <NavDrawer active={this.state.drawerActive} onOverlayClick={ this.toggleDrawerActive }> 
         <p>Navigation, account switcher, etc. go here.</p> 
        </NavDrawer> 
        <div style={{ flex: 1, overflowY: 'auto', padding: '1.8rem' }}> 
         <Button label="toggle drawer" onClick={ this.toggleDrawerActive } primary raised/> 
         <h1>Main Content</h1> 
         <p>Main content goes here.</p> 
        </div> 
        </Panel> 
       </Layout> 
       </Tab> 
      </Tabs> 
      </div> 
     </Panel> 
     </Layout> 
    ); 
    } 
} 

return <LayoutTest />; 

Sie können die box-shadow von NavDrawer in Navwarter-geschlossenen Zustand sichtbar finden. Sie können dies korrigieren, mit CSS

EDIT

gemerkt Seitenmenü:

nach this, NavDrawer und Panel Geschwister sind; so können Sie ändern DomainIntentsTab Abschnitt wie folgt.

Hinweis: vergessen Sie nicht, pinned auf NavDrawer

<Tab label="Intents"> 
    {/* DomainIntentsTab */} 
    <Layout> 
     <NavDrawer pinned active={this.state.drawerActive} onOverlayClick={ this.toggleDrawerActive }> 
      <p>Navigation, account switcher, etc. go here.</p> 
     </NavDrawer> 
     <Panel> 
      <div style={{ flex: 1, overflowY: 'auto', padding: '1.8rem' }}> 
       <Button label="toggle drawer" onClick={ this.toggleDrawerActive } primary raised/> 
       <h1>Main Content</h1> 
       <p>Main content goes here.</p> 
      </div> 
     </Panel> 
    </Layout> 
</Tab> 
+0

Ok hinzufügen, aber das Problem ist, ich die Seitenleiste „angedockt“ will, ich 'aktiv = true' einstellen könnte, aber seine immer noch über mein Gehalt. Für den Moment habe ich CSS verwendet, um die Sidebar zu implementieren. Wird als Antwort markieren, da es das Problem der Seitenleiste löst, die immer oben anlegt ... Aber ... welchen Fehler habe ich gemacht? –

+0

@JiewMeng hat meine Antwort bearbeitet. lassen Sie mich wissen, wenn Sie das wollten? – Venugopal

+0

Oh, das ist großartig! –

Verwandte Themen