【问题标题】:how to automatically change contentStyle when the screen is responsive?屏幕响应时如何自动更改 contentStyle?
【发布时间】:2016-04-15 03:36:32
【问题描述】:

我正在使用 Material UI 来制作应用程序布局。为了使我的布局具有响应性,我使用 import ResponsiveMixin from 'react-responsive-mixin'; ResponsiveMixin 的文档没有为我提供 React.Component 类作为示例,所以我尝试使用这个 import reactMixin from 'react-mixin'; 代替。

这里是我的代码:

导入

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

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

内容样式

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

【问题讨论】:

    标签: reactjs material-ui


    【解决方案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>
        )
      }
    
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-05
      • 1970-01-01
      相关资源
      最近更新 更多