React Material-ui 响应式布局

Posted

技术标签:

【中文标题】React Material-ui 响应式布局【英文标题】:React material-ui responsive layout 【发布时间】:2017-12-17 10:58:06 【问题描述】:

我正在尝试在我的 React 应用程序中使用 material-ui。这些组件很棒,但它们似乎并不是为了响应而设计的。例如,我正在尝试在我的主页中实现 Drawer 组件,如下所示:

        <div>
            <AppBar
                title="My App"
                iconClassNameRight="muidocs-icon-navigation-expand-more"
                onLeftIconButtonTouchTap=this.handleToggle
            />
            <TextField
                hintText="Hint goes here"
                floatingLabelText="Enter your Note here..."
                multiLine=true
                fullWidth=true
                rows=2
            />
            <Drawer
                docked=false
                open=this.state.open
                onRequestChange=(open) => this.setState(open)
            >
                <MenuItem>One</MenuItem >
                <MenuItem>Two</MenuItem >
            </Drawer>
        </div>
    );

当我将它加载到手机上时,它并没有像我希望的那样调整它的大小。有没有办法只使用material-ui来做出响应?如果没有,有什么方法可以使用 Bootstrap 或其他一些包来实现响应?

谢谢, -吉姆

【问题讨论】:

material-ui 演示站点如何在相同环境下工作?抽屉本身没有那么大的宽度,适合移动不是吗?像 appbar 这样的其他组件呢? 是的,material-ui 网站本身似乎是响应式的。但很难说他们做了什么来使其响应。我在源代码中没有看到任何对任何 Bootstrap 库的引用 所以这是没有引导程序的幸福。让你知道响应是通过css和js(而不是bootstrap)实现的 @jbambrough 你用什么版本的material-ui,4还是5? 【参考方案1】:

Material ui 还有一个响应式抽屉 这是文档的链接

https://mui.com/components/drawers/

【讨论】:

【参考方案2】:

听起来你需要material-ui useMediaQuery:https://mui.com/components/use-media-query/

我如何使用功能组件在我的应用程序中设置它的总结:

1) 创建了两个常量,一个是 useMediaQuery 来检测当前的屏幕分辨率,第二个是一个 useState,我们将使用它来根据屏幕分辨率将抽屉打开或关闭位置

2) 实现了一个 useEffect 挂钩,以便在 useMediaQuery 常量更改值时重新渲染。如果大于中等屏幕分辨率,请将侧边栏设置为打开。如果没有,请将其转至关闭位置。

3) 您应该能够在您的浏览器中测试这一点,方法是让您的浏览器变大和变小,并看到它响应式地打开和关闭。相同的 useMediaQuery 过程可用于任何材质 ui 组件,以使其响应屏幕大小。

希望这会有所帮助!

const Main = observer((): JSX.Element => 
/* You can use standard pixel sizes (e.g. 900px) if desired instead of sm, md, lg */
const md = useMediaQuery(theme.breakpoints.up('md')); 
const [appBarOpen, setAppBarOpen] = useState(true);


/* Collapse the side drawer if the screen size is medium or lower. Have it open 
if screen size is above medium */
useEffect(() => 
    setAppBarOpen(md === false ? false : true);
, [md]);

return(
    <Drawer
        variant="permanent"
            <Typography variant="h4">Menu</Typography>
        <SideBar open=appBarOpen />
    </Drawer>;
    )

【讨论】:

以上是关于React Material-ui 响应式布局的主要内容,如果未能解决你的问题,请参考以下文章

React js Material-UI 响应式表格

网格项高度与响应式方形子项不匹配

响应式布局新方案:融合响应式设计,开源 React 组件

React 应用程序上的响应式布局

React Native iOS 中的响应式布局

React 中的响应式卡片网格