使用道具通过样式化的组件混合来切换宽度
Use props to switch width using styled components mixins
使用的技术 - 样式化组件和反应
我有一个 mixin 可以让我的应用程序响应
import { css } from 'styled-components';
export default {
smallScreen: (...args: any) => css`
@media (max-width: 600px) {
${css(...args)}
}
`,
}
在另一个react组件中,我想用上面定义的方法写css适用于小屏幕
const SideNavWrapper = styled.article`
background: red; // this works
width: ${props => props.expanded ? '260px' : '80px'}; // this works
${media.smallScreen({
background: 'yellow', // this works
width: `${props => props.expanded ? '100%' : '20px'}`, // this doesn't work. props is undefined.
})}
`;
根据props.expanded
,我想切换SideNavWrapper的宽度。但是它不适用于较小的屏幕。
背景颜色按预期更改,但宽度不变。在调试时,我意识到 props 是未定义的。任何想法我错过了什么?非常感谢!
你会尝试吗:
${props => {
return (media.smallScreen({
background: 'yellow',
width: `${props.expanded ? '100%' : '20px'}`,
}))
}}
您可以使用的另一种方式,在我看来,阅读起来会更清晰,因此可维护性如下:
const getCorrectWidth = ({ expanded }) => (
expanded
? 260
: 80
);
const getCorrectSmallWidth = ({ expanded }) => (
expanded
? '100%'
: '20px'
);
const SideNavWrapper = styled.article`
background: red;
width: ${getCorrectWidth}px;
${media.smallScreen`
background: yellow;
width: ${getCorrectSmallWidth}
`}
`;
上面有明确的功能,告诉开发者他们在做什么。语法看起来也很干净。
使用的技术 - 样式化组件和反应
我有一个 mixin 可以让我的应用程序响应
import { css } from 'styled-components';
export default {
smallScreen: (...args: any) => css`
@media (max-width: 600px) {
${css(...args)}
}
`,
}
在另一个react组件中,我想用上面定义的方法写css适用于小屏幕
const SideNavWrapper = styled.article`
background: red; // this works
width: ${props => props.expanded ? '260px' : '80px'}; // this works
${media.smallScreen({
background: 'yellow', // this works
width: `${props => props.expanded ? '100%' : '20px'}`, // this doesn't work. props is undefined.
})}
`;
根据props.expanded
,我想切换SideNavWrapper的宽度。但是它不适用于较小的屏幕。
背景颜色按预期更改,但宽度不变。在调试时,我意识到 props 是未定义的。任何想法我错过了什么?非常感谢!
你会尝试吗:
${props => {
return (media.smallScreen({
background: 'yellow',
width: `${props.expanded ? '100%' : '20px'}`,
}))
}}
您可以使用的另一种方式,在我看来,阅读起来会更清晰,因此可维护性如下:
const getCorrectWidth = ({ expanded }) => (
expanded
? 260
: 80
);
const getCorrectSmallWidth = ({ expanded }) => (
expanded
? '100%'
: '20px'
);
const SideNavWrapper = styled.article`
background: red;
width: ${getCorrectWidth}px;
${media.smallScreen`
background: yellow;
width: ${getCorrectSmallWidth}
`}
`;
上面有明确的功能,告诉开发者他们在做什么。语法看起来也很干净。