#前提・実現したいこと
TypeScript, Material-UI, styled-componentsを使ってReactアプリを開発しています。
Material-UIのDrawerコンポーネントを使ってSideDrawerを実装しているのですが、
スタイリングはstyled-componentsで管理したく、makeStylesで書かれているものをリライトしている最中に、うまくpropsを参照できない問題が発生しています。
#発生している問題
元のコード
typescript
1... 2// styling 3const useStyles = makeStyles((theme: Theme) => 4 createStyles({ 5 ... 6 }, 7 appBar: { 8 transition: theme.transitions.create(['margin', 'width'], { 9 easing: theme.transitions.easing.sharp, 10 duration: theme.transitions.duration.leavingScreen, 11 }), 12 }, 13 appBarShift: { 14 width: `calc(100% - ${drawerWidth}px)`, 15 marginLeft: drawerWidth, 16 transition: theme.transitions.create(['margin', 'width'], { 17 easing: theme.transitions.easing.easeOut, 18 duration: theme.transitions.duration.enteringScreen, 19 }), 20 }, 21 ... 22 }), 23); 24 25//tsx 26... 27<AppBar 28 position="fixed" 29 className={clsx(classes.appBar, { 30 [classes.appBarShift]: open, 31 })} 32 > 33 ... 34</AppBar> 35... 36
上記のコードを、下記のように書き直そうとしています。
typescript
1//styled-components having $ as prefix 2const $AppBar = styled(AppBar)<{open: boolean}>` 3 transition: ${ 4 props => props.theme.transitions.create(['margin', 'width'], { 5 easing: props.theme.transitions.easing.sharp, 6 duration: props.theme.transitions.duration.leavingScreen, 7 }) 8 }; 9 /* 10 "Property 'props' does not exist on type 11 'AppBarProps & { open: boolean; } & ThemeProps<any>'" 12 というエラーが出て、propsをうまく参照することができません。 13 */ 14 ${({ open, props }) => open && ` 15 width: calc(100% - ${drawerWidth}px); 16 margin-left: ${drawerWidth}; 17 transition: ${ 18 /* なので"Parameter 'props' implicitly has an 'any' type."になってしまいます。 */ 19 props => props.theme.transitions.create(['margin', 'width'], { 20 easing: props.theme.transitions.easing.easeOut, 21 duration: props.theme.transitions.duration.enteringScreen, 22 }) 23 }; 24 `} 25`; 26... 27//jsx 28<$AppBar 29 position="fixed" 30 open={open} 31 > 32 ... 33</$AppBar> 34
この時、openによってconditionalにスタイリングしたいのですが、themeの参照に必要なpropsを指示してくれません。
#試してみたこと
下記のように型を指定しようと試みたのですが、上手くいきません。
typescript
1${({ open, props: ThemedStyledProps }) => open && ` 2 ... 3 `}
ご教示いただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。