如何在屏幕响应时自动更改contentStyle?

时间:2016-04-15 03:36:32

标签: reactjs material-ui

我使用Material UI制作应用程序布局。为了使我的布局响应,我使用从'react-responsive-mixin'导入ResponsiveMixin; ResponsiveMixin的doc不提供React.Component类作为示例,所以我尝试使用来自'react-mixin'; 的 import reactMixin。

这里是我的代码:

  

进口

import React from 'react';
import reactMixin from 'react-mixin';
import ResponsiveMixin from 'react-responsive-mixin';

import Paper from 'material-ui/lib/paper';
  

contentStyle

const contentStyle = {
    small: {
        height: '100%',
        width: '98%',
        paddingTop: 60,
        marginLeft: '1%',
        paddingLeft: 0,
        paddingRight: 0
    },
    medium: {
        height: '100%',
        width: '90%',
        paddingTop: 60,
        marginLeft: '5%',
        paddingLeft: 0,
        paddingRight: 0
    },
    large: {
        height: '100%',
        width: '80%',
        paddingTop: 60,
        marginLeft: 280,
        paddingLeft: 40,
        paddingRight: 40
    }
};
  

这是我的组件

export class MainLayout extends React.Component {

    constructor(props) {
        super(props);
    }
    componentDidMount() {
        this.media({maxWidth: 600}, function () {
            /*small*/
        }.bind(this));

        this.media({minWidth: 601, maxWidth: 1024}, function () {
            /*medium*/
        }.bind(this));

        this.media({minWidth: 1025}, function () {
            /*large*/
        }.bind(this));
    }

    render() {
        const {header, content, footer} = this.props; // destructure this.props to consts
        return (
            <div>
                <header>
                    {header}
                </header>
                <main>
                    <Paper style={contentStyle} zDepth={1}>
                        {content}
                    </Paper>
                </main>
                <footer>
                    <Paper style={contentStyle}>
                        {footer}
                    </Paper>
                </footer>
            </div>
        )
    }
}
reactMixin(MainLayout.prototype, ResponsiveMixin);
  

ResponsiveMixin位于上方   componentDidMount(){/ 包含responsiveMixin函数 /}

感谢您的帮助:D

1 个答案:

答案 0 :(得分:1)

Material UI支持内联样式(具有良好的主题),所以如果你想这样做,你可以这样做:

import React from 'react'

import {Mixins} from 'material-ui'
const {StylePropable, StyleResizable} = Mixins

export default React.createClass({

  // Boilerplate and React lifecycle methods

  propTypes: {
    onChangeMuiTheme: React.PropTypes.func,
  },

  contextTypes: {
    muiTheme: React.PropTypes.object,
  },

  mixins: [StylePropable, StyleResizable],

  getInitialState() {
    return {
    }
  },

  // Helpers

  getStyles() {
    let styles = {
      text: {
        fontSize: 12,
        color: this.context.muiTheme.rawTheme.palette.primary1Color
      }
    }

    // example of a screen-size sensitive style
    if (this.isDeviceSize(StyleResizable.statics.Sizes.MEDIUM)) {  // active for >= MEDIUM
      styles.text.fontSize = 20
    }

    return styles
  },

  render() {
    let styles = this.getStyles()
    return (
      <p style={styles.text}>Hello world!</p>
    )
  }

})