2017-12-11 10 views
1

저는 현재 material-ui 반응 라이브러리를 사용 중이며 반응 형 서랍 구성 요소 예제를 복사했습니다.다른 구성 요소의 스타일링을 사용하는 방법은 무엇입니까?

사이드 바 기능과 사이드 바 구성 요소에 설정된 classes.content 스타일을 사용하여 메인 섹션에서 내 자신의 주요 내용을 사이드를 분리하고 별도의 구성 요소로 헤더 및 호출 가능한 방법이 있나요

<main className={classes.content}> <Typography noWrap>{'You think water moves fast? You should see ice.'} </Typography> </main>

는 예를 들어, 내 집 기능 당신은 단지 새로운 반작용 구성 요소에 스타일을 이동하여 별도의 구성 요소로 별도의 스타일을 이동할 수있는 팀에게

import React from 'react'; 
import PropTypes from 'prop-types'; 
import { withStyles } from 'material-ui/styles'; 
import Drawer from 'material-ui/Drawer'; 
import AppBar from 'material-ui/AppBar'; 
import Toolbar from 'material-ui/Toolbar'; 
import List from 'material-ui/List'; 
import Typography from 'material-ui/Typography'; 
import IconButton from 'material-ui/IconButton'; 
import Hidden from 'material-ui/Hidden'; 
import Divider from 'material-ui/Divider'; 
import MenuIcon from 'material-ui-icons/Menu'; 
import { mailFolderListItems, otherMailFolderListItems } from './tileData'; 

const drawerWidth = 240; 

const styles = theme => ({ 
    root: { 
    width: '100%', 
    height: 430, 
    marginTop: theme.spacing.unit * 3, 
    zIndex: 1, 
    overflow: 'hidden', 
    }, 
    appFrame: { 
    position: 'relative', 
    display: 'flex', 
    width: '100%', 
    height: '100%', 
    }, 
    appBar: { 
    position: 'absolute', 
    marginLeft: drawerWidth, 
    [theme.breakpoints.up('md')]: { 
     width: `calc(100% - ${drawerWidth}px)`, 
    }, 
    }, 
    navIconHide: { 
    [theme.breakpoints.up('md')]: { 
     display: 'none', 
    }, 
    }, 
    drawerHeader: theme.mixins.toolbar, 
    drawerPaper: { 
    width: 250, 
    [theme.breakpoints.up('md')]: { 
     width: drawerWidth, 
     position: 'relative', 
     height: '100%', 
    }, 
    }, 
    content: { 
    backgroundColor: theme.palette.background.default, 
    width: '100%', 
    padding: theme.spacing.unit * 3, 
    height: 'calc(100% - 56px)', 
    marginTop: 56, 
    [theme.breakpoints.up('sm')]: { 
     height: 'calc(100% - 64px)', 
     marginTop: 64, 
    }, 
    }, 
}); 

class ResponsiveDrawer extends React.Component { 
    state = { 
    mobileOpen: false, 
    }; 

    handleDrawerToggle =() => { 
    this.setState({ mobileOpen: !this.state.mobileOpen }); 
    }; 

    render() { 
    const { classes, theme } = this.props; 

    const drawer = (
     <div> 
     <div className={classes.drawerHeader} /> 
     <Divider /> 
     <List>{mailFolderListItems}</List> 
     <Divider /> 
     <List>{otherMailFolderListItems}</List> 
     </div> 
    ); 

    return (
     <div className={classes.root}> 
     <div className={classes.appFrame}> 
      <AppBar className={classes.appBar}> 
      <Toolbar> 
       <IconButton 
       color="contrast" 
       aria-label="open drawer" 
       onClick={this.handleDrawerToggle} 
       className={classes.navIconHide} 
       > 
       <MenuIcon /> 
       </IconButton> 
       <Typography type="title" color="inherit" noWrap> 
       Responsive drawer 
       </Typography> 
      </Toolbar> 
      </AppBar> 
      <Hidden mdUp> 
      <Drawer 
       type="temporary" 
       anchor={theme.direction === 'rtl' ? 'right' : 'left'} 
       open={this.state.mobileOpen} 
       classes={{ 
       paper: classes.drawerPaper, 
       }} 
       onRequestClose={this.handleDrawerToggle} 
       ModalProps={{ 
       keepMounted: true, // Better open performance on mobile. 
       }} 
      > 
       {drawer} 
      </Drawer> 
      </Hidden> 
      <Hidden mdDown implementation="css"> 
      <Drawer 
       type="permanent" 
       open 
       classes={{ 
       paper: classes.drawerPaper, 
       }} 
      > 
       {drawer} 
      </Drawer> 
      </Hidden> 
      <main className={classes.content}> 
      <Typography noWrap>{'You think water moves fast? You should see ice.'}</Typography> 
      </main> 
     </div> 
     </div> 
    ); 
    } 
} 

ResponsiveDrawer.propTypes = { 
    classes: PropTypes.object.isRequired, 
    theme: PropTypes.object.isRequired, 
}; 

export default withStyles(styles, { withTheme: true })(ResponsiveDrawer); 
+0

그래서 'Drawer'를 별도의 구성 요소에 넣고 싶지만'content' 스타일을'main' 요소에 적용하고 싶습니까? –

+1

예. 올바른 @jdupont – dankthreads

답변

0

을 사용하고 싶어. 나는 당신의 사건을 모범으로 삼았습니다.

main 구성 요소 :

import React from 'react'; 
import PropTypes from 'prop-types'; 
import { withStyles } from 'material-ui/styles'; 
import Typography from 'material-ui/Typography'; 

const styles = theme => ({ 
    content: { 
    backgroundColor: theme.palette.background.default, 
    width: '100%', 
    padding: theme.spacing.unit * 3, 
    height: 'calc(100% - 56px)', 
    marginTop: 56, 
    [theme.breakpoints.up('sm')]: { 
     height: 'calc(100% - 64px)', 
     marginTop: 64, 
    }, 
    }, 
}); 

const Main = (props) => { 
    const { classes } = props; 

    return (
    <main className={classes.content}> 
     <Typography noWrap>You think water moves fast? You should see ice.</Typography> 
    </main> 
); 
}; 

Main.propTypes = { 
    classes: PropTypes.object.isRequired, 
}; 

export default withStyles(styles, { withTheme: true })(Main); 

나머지, 추출 된 main 구성 요소를 사용하여이 :

import React from 'react'; 
import PropTypes from 'prop-types'; 
import { withStyles } from 'material-ui/styles'; 
import Drawer from 'material-ui/Drawer'; 
import AppBar from 'material-ui/AppBar'; 
import Toolbar from 'material-ui/Toolbar'; 
import List from 'material-ui/List'; 
import Typography from 'material-ui/Typography'; 
import IconButton from 'material-ui/IconButton'; 
import Hidden from 'material-ui/Hidden'; 
import Divider from 'material-ui/Divider'; 
import MenuIcon from 'material-ui-icons/Menu'; 
import { mailFolderListItems, otherMailFolderListItems } from './tileData'; 

const drawerWidth = 240; 

const styles = theme => ({ 
    root: { 
    width: '100%', 
    height: 430, 
    marginTop: theme.spacing.unit * 3, 
    zIndex: 1, 
    overflow: 'hidden', 
    }, 
    appFrame: { 
    position: 'relative', 
    display: 'flex', 
    width: '100%', 
    height: '100%', 
    }, 
    appBar: { 
    position: 'absolute', 
    marginLeft: drawerWidth, 
    [theme.breakpoints.up('md')]: { 
     width: `calc(100% - ${drawerWidth}px)`, 
    }, 
    }, 
    navIconHide: { 
    [theme.breakpoints.up('md')]: { 
     display: 'none', 
    }, 
    }, 
    drawerHeader: theme.mixins.toolbar, 
    drawerPaper: { 
    width: 250, 
    [theme.breakpoints.up('md')]: { 
     width: drawerWidth, 
     position: 'relative', 
     height: '100%', 
    }, 
    }, 
}); 

class ResponsiveDrawer extends React.Component { 
state = { 
    mobileOpen: false, 
}; 

handleDrawerToggle =() => { 
    this.setState({ mobileOpen: !this.state.mobileOpen }); 
}; 

render() { 
    const { classes, theme } = this.props; 

    const drawer = (
    <div> 
     <div className={classes.drawerHeader} /> 
     <Divider /> 
     <List>{mailFolderListItems}</List> 
     <Divider /> 
     <List>{otherMailFolderListItems}</List> 
    </div> 
); 

    return (
    <div className={classes.root}> 
     <div className={classes.appFrame}> 
     <AppBar className={classes.appBar}> 
      <Toolbar> 
      <IconButton 
       color="contrast" 
       aria-label="open drawer" 
       onClick={this.handleDrawerToggle} 
       className={classes.navIconHide} 
      > 
       <MenuIcon /> 
      </IconButton> 
      <Typography type="title" color="inherit" noWrap> 
       Responsive drawer 
      </Typography> 
      </Toolbar> 
     </AppBar> 
     <Hidden mdUp> 
      <Drawer 
      type="temporary" 
      anchor={theme.direction === 'rtl' ? 'right' : 'left'} 
      open={this.state.mobileOpen} 
      classes={{ 
       paper: classes.drawerPaper, 
      }} 
      onRequestClose={this.handleDrawerToggle} 
      ModalProps={{ 
       keepMounted: true, // Better open performance on mobile. 
      }} 
      > 
      {drawer} 
      </Drawer> 
     </Hidden> 
     <Hidden mdDown implementation="css"> 
      <Drawer 
      type="permanent" 
      open 
      classes={{ 
       paper: classes.drawerPaper, 
      }} 
      > 
      {drawer} 
      </Drawer> 
     </Hidden> 
     <Main /> 
     </div> 
    </div> 
    ); 
} 
} 

ResponsiveDrawer.propTypes = { 
    classes: PropTypes.object.isRequired, 
    theme: PropTypes.object.isRequired, 
}; 

export default withStyles(styles, { withTheme: true })(ResponsiveDrawer); 

그래서, 당신은 당신이 추출하고있는 반작용 구성 요소와 스타일링을 당겨 수 있습니다. 문서에서 material-ui's styling system에 대한 몇 가지 세부 정보를 제공합니다.

+1

정확하게 필요한 것, 감사합니다. @jdupont – dankthreads

관련 문제