我有一个主题:
const smartPhonePortrait = 320;
const theme = {
isCompact:
typeof window !== 'undefined'
? window.matchMedia(`(min-width:${smartPhonePortrait}px)`).matches
: false
};
export default theme;
字符串
然后我将这个主题添加到我的提供程序中
在_app.js中:
import { ThemeProvider } from 'styled-components';
import theme from '../theme';
const App = ({ Component, pageProps, router }) => {
return (
<ThemeProvider theme={theme}>
... my app
</ThemeProvider>
);
};
型
在我的样式化组件中,我这样做:
const Item = styled.div`
display: flex;
flex-direction: column;
flex-grow: 1;
flex-shrink: 0;
flex-basis: ${(props) => (props.theme.isCompact ? '100%' : '48%')};
`;
型
这在第一次渲染时有效,但当我更改屏幕大小时,它不会更新。如果我在移动的我得到flex-basis 100%
,但如果我改变屏幕大小为桌面我不得到48%
我该怎么做?
1条答案
按热度按时间hujrc8aj1#
你可以做一个钩子:
字符串
然后在你的
__app.js
中导入它并将其添加到你的主题中:型