рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдореИрдВ рдПрдХ рдШрдЯрдХ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдк рдФрд░ рдереАрдо рдСрдмреНрдЬреЗрдХреНрдЯ рджреЛрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд╡рд┐рд╖рдп рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
const styles = theme => ({
title: {
...theme.typography.headline,
textAlign: 'center',
padding: '8px 16px',
margin: 0,
color: theme.palette.common.white,
backgroundColor: theme.palette.primary[500],
},
withStyles(styles, { withTheme: true })(Component);
....
рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕реНрдЯрд╛рдЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкреНрд░реЙрдкреНрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред
{
....
display: (props) => props.display
}
рдореИрдВ рдЕрдВрдд рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП react-jss
рдФрд░ withTheme
рдХреЛ рдорд┐рд▓рд╛рддрд╛ рд╣реВрдВ
import { withTheme } from 'material-ui/styles';
import injectSheet from 'react-jss';
function withStyles(styles, Component) {
return withTheme()(injectSheet(styles)(Component));
}
export default withStyles;
....
const styles = {
title: {
display: (props) => props.display,
textAlign: 'center',
padding: '8px 16px',
margin: 0,
color: ({ theme }) => theme.palette.common.white,
backgroundColor: ({ theme }) => theme.palette.primary[500],
},
рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╛рдж рдЖрддреА рд╣реИ
title: {
...theme.typography.headline,
рд╣рдореЗрдВ рд╕рдВрднрд╡рддрдГ рдЙрд╕реА рд╕рдВрджрд░реНрдн рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдмрдирд╛рдХрд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЬреЗрдПрд╕рдПрд╕: https://github.com/cssinjs/theming/blob/master/src/channel.js#L1ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, #7633 . рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ
рдореЗрд░реЗ рдкрд╛рд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЬреЗрдПрд╕рдПрд╕ рдЗрдВрдЯрд░рдСрдкрд░реЗрдмрд┐рд▓рд┐рдЯреА рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдкреАрдЖрд░ рддреИрдпрд╛рд░ рд╣реИред рдореИрдВ рдЗрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдЬреЛрдбрд╝ рджреВрдВрдЧрд╛ред рд╕реАрд╕реА @ рдХреЛрдл
@oliviertassinari рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╢реИрд▓рд┐рдпреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рднреАрддрд░ рд╕рд╣рд╛рд░рд╛ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрдм рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╣ рдореБрдЭреЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреИрд╕реЗ...
@pelotom рдирд╣реАрдВ, рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рдкрд╛рд╕ рдЧреБрдгреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд▓реЛрдЧ рдЗрд╕ рдлреАрдЪрд░ рдХреА рдХрд┐рддрдиреА рдорд╛рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдмрдЧ рдлрд┐рдХреНрд╕ рдХреЗ рдмрд╛рдж, рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВред рдЖрдк injectSheet HOC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрдИ рдореБрджреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рджреНрд╡рд╛рд░ рдЦреЛрд▓рддрд╛ рд╣реИ: рдореЗрдореЛрд░реА рд▓реАрдХ, рд╣реЙрдЯ рд░реАрд▓реЛрдбрд┐рдВрдЧ рдЯреВрдЯрд╛ рд╣реБрдЖ, рдХреЛрдИ classes
рд╕рдВрд░рдЪрдирд╛ рдирд╣реАрдВ, рдХреЛрдИ рдЖрдВрддрд░рд┐рдХ рд░реЗрдлрд░реА рдПрдХреНрд╕реЗрд╕ рдирд╣реАрдВ, рдЯреВрдЯреА рд╣реБрдИ рдереАрдо рдиреЗрд╕реНрдЯрд┐рдВрдЧ рд╣реИрдВрдбрд▓рд┐рдВрдЧред рдХрдо рд╕реЗ рдХрдо, рдпрд╣ рдХреБрдЫ рдРрд╕реЗ рдореБрджреНрджреЗ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдореИрдВ рдЕрддреАрдд рдореЗрдВ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЗрд╕рдиреЗ рдореЗрд░реЗ рдкреБрдирд░реНрд▓реЗрдЦрди рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрджрдо рджрд░ рдХрджрдо рдЙрди рдореБрджреНрджреЛрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
@oliviertassinari рдпрд╣ рд╕реБрдирдХрд░ рдмрд╣реБрдд рд╕реБрдХреВрди рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ! рдЗрд╕рд╕реЗ рдШрдЯрдХреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп рдЖрдХрд╛рд░ (рдпрд╛рдиреА рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ) рдХреЗ рд╕рд╛рде рдПрдХ рдЪреЗрдХрдмреЙрдХреНрд╕ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:
<CustomCheckbox size={16} />
рдЕрдЧрд░ рд╣рдо props
рдореЗрдВ styles
, рддреЛ рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛:
const styles = {
root: {
width: props => props.size,
height: props => props.size
}
}
рдпрд╛
const styles = props => ({
root: {
width: props.size,
height: props.size
}
})
рдФрд░ рдлрд┐рд░:
const CustomCheckbox = ({size, classes}) => <Checkbox className={classes.root} />;
export default withStyles(styles)(CustomCheckbox);
рдЕрднреА рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╛ рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдЕрдиреБрдорд╛рди рд╣реИ рдХрд┐ рдЖрдк рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдкреНрд░реЙрдкреНрд╕ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ?
@nmchaves рдЖрдк рдХреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдирд▓рд╛рдЗрди-рд╢реИрд▓реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд┐рд░рдиреЗ рд▓рдЧрддреЗ рд╣реИрдВ, рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдХреБрдЫ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╢реНрди
https://github.com/callemall/material-ui/blob/75a30061e76eae93c711ec202a2c7e4238a4f19a/docs/src/pages/style/SvgIcons.js#L38 -L44
рдзрдиреНрдпрд╡рд╛рдж @oliviertassinari ! рдореИрдВ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ withStyles
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрдирд▓рд╛рдЗрди-рд╢реИрд▓рд┐рдпрд╛рдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░реЗрдВрдЧреАред рдФрд░ рдпрд╣ рддрдереНрдп рдХрд┐ рдЖрдк рдпрд╣рд╛рдВ + рдбреЙрдХреНрд╕ рдореЗрдВ рдЗрд╕рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдореБрдЭреЗ рдЗрд╕ рдирд┐рд░реНрдгрдп рд╕реЗ рдмрд╣реБрдд рдЖрд╢реНрд╡рд╕реНрдд рдорд╣рд╕реВрд╕ рдХрд░рд╛рддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдзрдиреНрдпрд╡рд╛рдж!
рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд▓рд┐рдП рд╢реИрд▓реА рдореЗрдВ рдПрдХ рдкреНрд░реЛрдк (рдЫрд╡рд┐ рд╕реНрд░реЛрдд) рдкрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЫрд╡рд┐
рдореИрдВ withStyle
const withStylesProps = styles =>
Component =>
props => {
console.log(props);
const Comp = withStyles(styles(props))(Component);
// return <div>lol</div>;
return <Comp {...props} />;
};
const styles = props => ({
foo: {
height: `${props.y || 50}px`,
}
});
export default withStylesProps(styles)(
props => (
<div className={props.classes.foo} style={{ ...props.style, background: 'yellow' }}>
<h1>Hello!</h1>
</div>
)
);
рдбреЗрдореЛ: https://codesandbox.io/s/k2y01rj3w7
(рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ ^ рдмрд┐рдирд╛ рдХрд┐рд╕реА ThemeProvider
рдФрд░ JssProvider
рд╕реЗрдЯ рдЕрдк https://codesandbox.io/s/q6v7krx6 рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрд╣ рдпрд╣ рдЗрд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИ)
@caub рдпрд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЗрд╕ рдкреИрдЯрд░реНрди рд╕реЗ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ CSS рдШрдЯрдХ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдмрдврд╝реЗрдЧрд╛ред рдпрд╣ #7633 рдХрд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рдЦреБрджрд╛рдИ рдирд╣реАрдВ рдХреА рд╣реИред рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ @kof рд╕рдВрд╕реНрдХрд░рдг рдХреБрдЫ рдкреНрд░рджрд░реНрд╢рди рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
@caub рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
@oliviertassinari рдпрд╣ https://github.com/cssinjs/react-jss/blob/master/readme.md#dynamic -values тАЛтАЛin React-jss рд╣реИ, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдореЗрдВ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрд╛? рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдЖрдкрдХреА рдмрд╛рдд рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЗрдирд▓рд╛рдЗрди style
рдкреНрд░реЛрдк рдЧрддрд┐рд╢реАрд▓ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХрджрдо рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рднреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИред https://github.com/airbnb/react-with-styles рднреА рд╣реИ рдЬреЛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдЧрддрд┐рд╢реАрд▓ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП className
рдФрд░ style
рдХреЛ рд╕рдВрднрд╛рд▓реЗрдЧрд╛
рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ рдХреНрдпрд╛ рдХреЛрдИ рдореЗрд░реА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
'рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛' рд╕реЗ рдЖрдпрд╛рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛;
'рдкреНрд░реЛрдк-рдкреНрд░рдХрд╛рд░' рд╕реЗ рдкреНрд░реЛрдкрдЯрд╛рдЗрдк рдЖрдпрд╛рдд рдХрд░реЗрдВ;
'material-ui/styles' рд╕реЗ {withStyles} рдЖрдпрд╛рдд рдХрд░реЗрдВ;
'рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ/рджрд░рд╛рдЬ' рд╕реЗ рдЖрдпрд╛рдд рджрд░рд╛рдЬ;
'Material-ui/AppBar' рд╕реЗ AppBar рдЖрдпрд╛рдд рдХрд░реЗрдВ;
'рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ/рдЯреВрд▓рдмрд╛рд░' рд╕реЗ рдЯреВрд▓рдмрд╛рд░ рдЖрдпрд╛рдд рдХрд░реЗрдВ;
'рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ/рд╕реВрдЪреА' рд╕реЗ рдЖрдпрд╛рдд рд╕реВрдЪреА;
'рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ/рдЯрд╛рдЗрдкреЛрдЧреНрд░рд╛рдлреА' рд╕реЗ рдЯрд╛рдЗрдкреЛрдЧреНрд░рд╛рдлреА рдЖрдпрд╛рдд рдХрд░реЗрдВ;
'Material-ui/IconButton' рд╕реЗ IconButton рдЖрдпрд╛рдд рдХрд░реЗрдВ;
'рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ/рд╣рд┐рдбрди' рд╕реЗ рдЫреБрдкрд╛ рдЖрдпрд╛рдд рдХрд░реЗрдВ;
'рдордЯреЗрд░рд┐рдпрд▓-рдпреВрдЖрдИ/рдбрд┐рд╡рд╛рдЗрдбрд░' рд╕реЗ рдЗрдВрдкреЛрд░реНрдЯ рдбрд┐рд╡рд╛рдЗрдбрд░;
'Material-ui-icons/Menu' рд╕реЗ MenuIcon рдЖрдпрд╛рдд рдХрд░реЗрдВ;
рдЖрдпрд╛рдд {mailFolderListItems, OtherMailFolderListItems} './tileData' рд╕реЗ;
рдХрд╛рд╕реНрдЯ рдбреНрд░рд╛рд╡рд░рд╡рд┐рдбреНрде = реирекреж;
рдХреЙрдиреНрд╕реНрдЯ рд╕реНрдЯрд╛рдЗрд▓ = рдереАрдо => ({
рдЬрдбрд╝: {
рдЪреМрдбрд╝рд╛рдИ: '100%',
рдКрдВрдЪрд╛рдИ: 430,
рдорд╛рд░реНрдЬрд┐рдирдЯреЙрдк: рдереАрдо.рд╕реНрдкреЗрд╕рд┐рдВрдЧ.рдпреВрдирд┐рдЯ * 3,
рдЬреЗрдбрдЗрдВрдбреЗрдХреНрд╕: 1,
рдУрд╡рд░ рдлрд▓реЛ рд╣рд┐рдбреЗрди',
},
рдРрдкрдлреНрд░реЗрдо: {
рд╕реНрдерд┐рддрд┐: 'рд░рд┐рд╢реНрддреЗрджрд╛рд░',
рдкреНрд░рджрд░реНрд╢рди: 'рдлреНрд▓реЗрдХреНрд╕',
рдЪреМрдбрд╝рд╛рдИ: '100%',
рдКрдВрдЪрд╛рдИ: '100%',
},
рдРрдкрдмрд╛рд░: {
рд╕реНрдерд┐рддрд┐: 'рдкреВрд░реНрдг',
рдорд╛рд░реНрдЬрд┐рди рд▓реЗрдлреНрдЯ: рдбреНрд░рд╛рд╡рд░рд╡рд┐рдбреНрде,
[рдереАрдо.рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ.рдЕрдк ('рдПрдордбреА')]: {
рдЪреМрдбрд╝рд╛рдИ: calc(100% - ${drawerWidth}px)
,
},
},
navIconHide: {
[рдереАрдо.рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ.рдЕрдк ('рдПрдордбреА')]: {
рдХреБрдЫ рднреА рдбрд┐рд╕реНрдкреНрд▓реЗ рдордд рдХрд░реЛ',
},
},
рдбреНрд░рд╛рд╡рд░рд╣реИрдбрд░: рдереАрдо.рдорд┐рдХреНрд╕рд┐рдиреНрд╕.рдЯреВрд▓рдмрд╛рд░,
рджрд░рд╛рдЬ рдкреЗрдкрд░: {
рдЪреМрдбрд╝рд╛рдИ: реирелреж,
[рдереАрдо.рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ.рдЕрдк ('рдПрдордбреА')]: {
рдЪреМрдбрд╝рд╛рдИ: рджрд░рд╛рдЬрд╡рд┐рдбреНрде,
рд╕реНрдерд┐рддрд┐: 'рд░рд┐рд╢реНрддреЗрджрд╛рд░',
рдКрдВрдЪрд╛рдИ: '100%',
},
},
рд╡рд┐рд╖рдп: {
рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдХрд▓рд░: рдереАрдо.рдкреИрд▓реЗрдЯ.рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб.рдбрд┐рдлреЙрд▓реНрдЯ,
рдЪреМрдбрд╝рд╛рдИ: '100%',
рдкреИрдбрд┐рдВрдЧ: рдереАрдо.рд╕реНрдкреЗрд╕рд┐рдВрдЧ.рдпреВрдирд┐рдЯ * 3,
рдКрдВрдЪрд╛рдИ: 'рдХреИрд▓реНрдХ(100% - 56px)',
рдорд╛рд░реНрдЬрд┐рди рдЯреЙрдк: 56,
[рдереАрдо.рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ.рдЕрдк ('рдПрд╕рдПрдо')]: {
рдКрдВрдЪрд╛рдИ: 'рдХреИрд▓реНрдХ(100% - 64px)',
рдорд╛рд░реНрдЬрд┐рди рдЯреЙрдк: 64,
},
},
});
рдирд┐рд░реНрдпрд╛рдд рд╡рд░реНрдЧ ResponsiveDrawer React.Component рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ {
рд░рд╛рдЬреНрдп = {
рдореЛрдмрд╛рдЗрд▓ рдУрдкрди: рдЭреВрдард╛,
};
рд╣реИрдВрдбрд▓рдбреНрд░рд╛рд╡рд░ рдЯреЙрдЧрд▓ = () => {
this.setState({mobileOpen: !this.state.mobileOpen});
};
рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛() {
const {рдХрдХреНрд╖рд╛рдПрдВ, рд╡рд┐рд╖рдп} = this.props;
const drawer = (
<div>
<div className={classes.drawerHeader} />
<Divider />
<List>{mailFolderListItems}</List>
<Divider />
<List>{otherMailFolderListItems}</List>
</div>
);
return (
<div className={classes.root}>
<div className={classes.appFrame}>
<AppBar className={classes.appBar}>
<Toolbar>
<IconButton
color="inherit"
aria-label="open drawer"
onClick={this.handleDrawerToggle}
className={classes.navIconHide}
>
<MenuIcon />
</IconButton>
<Typography variant="title" color="inherit" noWrap>
Responsive drawer
</Typography>
</Toolbar>
</AppBar>
<Hidden mdUp>
<Drawer
variant="temporary"
anchor={theme.direction === 'rtl' ? 'right' : 'left'}
open={this.state.mobileOpen}
classes={{
paper: classes.drawerPaper,
}}
onClose={this.handleDrawerToggle}
ModalProps={{
keepMounted: true, // Better open performance on mobile.
}}
>
{drawer}
</Drawer>
</Hidden>
<Hidden smDown implementation="css">
<Drawer
variant="permanent"
open
classes={{
paper: classes.drawerPaper,
}}
>
{drawer}
</Drawer>
</Hidden>
<main className={classes.content}>
<Typography noWrap>{'You think water moves fast? You should see ice.'}</Typography>
</main>
</div>
</div>
);
}
}
ResponsiveDrawer.propTypes = {
рдХрдХреНрд╖рд╛рдПрдВ: PropTypes.object.isRequired,
рд╡рд┐рд╖рдп: PropTypes.object.isRequired,
};
рд╕реНрдЯрд╛рдЗрд▓реНрд╕ (рд╢реИрд▓рд┐рдпреЛрдВ) (рдЙрддреНрддрд░рджрд╛рдпреА рдбреНрд░рд╛рд╡рд░) рдХреЗ рд╕рд╛рде рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВ;
`
рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ CSS рдШрдЯрдХ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдмрдврд╝реЗрдЧрд╛ред
@oliviertassinari рдЗрдВрдЬреЗрдХреНрд╢рди рд╕реАрдПрд╕рдПрд╕ + рдмрдврд╝реЗрдЧрд╛ - рдЙрд╕реА рддрд░рд╣ рдПрдЪрдЯреАрдПрдордПрд▓ рдЗрдирд▓рд╛рдЗрди рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдмрдврд╝реЗрдЧрд╛ред рд╕реНрдерд┐рд░ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╢реАрдЯ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рднреА рдШрдЯрдХ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдЖрдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рдШрдЯрдХ рдХреЗ рд╕рд╛рде рдпрд╣ withStyle
рдХреЛ render
рд╕реЗ render
рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдЧрд╛, рд╣рдо рдкреВрд░реНрдг рд╢реБрджреНрдз рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВред
import React from 'react';
import {
withStyles,
Grid,
CircularProgress
} from 'material-ui';
const PreloadComponent = props => {
const { classes,size } = props;
return (
<Grid className={classes.container} container justify={'center'} alignItems={'center'}>
<CircularProgress size={size}/>
</Grid>
)
};
const StyleWithThemeProps = (props) => {
return withStyles(theme => ({
container: {
paddingTop: props.size*2 || 50,
paddingBottom: props.size*2 || 50,
}
}),{withTheme: true})(PreloadComponent)
};
const Preload = props => {
const { size } = props;
const WithStylesPreloadComponent = StyleWithThemeProps(props);
return (
<WithStylesPreloadComponent {...props}/>
)
};
Preload.defaultProps = {
size: 20
};
export default Preload;
рд╣рдо рдЕрджреНрдпрддрди рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╢реБрджреНрдз рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
const PreloadComponent = props => {
const { classes,size } = props;
return (
<Grid className={classes.container} container justify={'center'} alignItems={'center'}>
<CircularProgress size={size}/>
</Grid>
)
};
const StyleWithThemeProps = (props) => {
return withStyles(theme => ({
container: {
paddingTop: props.size*2 || 50,
paddingBottom: props.size*2 || 50,
}
}),{withTheme: true})(PreloadComponent)
};
class PreloadFull extends React.PureComponent {
constructor(props,context) {
super(props);
}
componentWillMount() {
this.StyledPreloadFull = StyleWithThemeProps(this.props);
}
componentWillUpdate(nextProps) {
this.StyledPreloadFull = StyleWithThemeProps(nextProps);
}
render() {
const { StyledPreloadFull,props } = this;
return (
<StyledPreloadFull {...props}/>
);
}
}
PreloadFull.defaultProps = {
size: 20
};
export default PreloadFull;
@ up209d рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдлреА рджрд░реНрджрдирд╛рдХ рд╣реИ, рдореИрдВ withStyles
рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рдЕрдзрд┐рдХ рд╕реАрдзреЗ https://github.com/cssinjs/react-jss рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рдкреНрд░реЛрдк рдкрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ
@ рд╢реНрд░реАрдХрд╛рдВрдд рдЪреЗрдмреНрд░реЛрд▓реВ рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреЗ рд╕рдВрджреЗрд╢ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореБрджреНрджреЗ рдкрд░ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рд╖рдп рдореЗрдВ рдирд╣реАрдВ рд╣реИ?
рдмрд╕ рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рдХрд┐ рдЗрд╕ рдкрд░ рдХреНрдпрд╛ рд╕реНрдерд┐рддрд┐ рд╣реИ? рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЗрдПрд╕рдПрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝, рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝, рдФрд░ рдЕрднреА рддрдХ рдореБрдИ + рдЬреЗрдПрд╕рдПрд╕ + рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдвреВрдВрдв рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЗрдирд▓рд╛рдЗрди рд╢реИрд▓рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдХреБрдЫ рдЗрдирд▓рд╛рдЗрди рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд░рдЦрдирд╛ рдХрднреА-рдХрднреА рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдРрд╕реА рдХрдИ рд╢реИрд▓рд┐рдпрд╛рдБ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрд╡рд╕реНрдерд╛рдПрдБ рд╣реИрдВ, рд╕рднреА рдереАрдо рдФрд░ рдкреНрд░реЙрдкреНрд╕ рдкрд░ рдПрдХ рд╕рд╛рде рдирд┐рд░реНрднрд░ рд╣реИрдВ: рдирд┐рд░рд╛рд╢:
@chazsolo рдЕрд░реЗ injectSheet
рд╕реЗ react-jss
рдмрдЬрд╛рдп withStyles
рд╕реЗ mui
ред рдЗрд╕ рддрд░рд╣ рдЖрдкрдХреЗ рдкрд╛рд╕ props
рдФрд░ theme
рджреЛрдиреЛрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
import injectSheet from 'react-jss';
const styles = theme => ({
container: {
color: props => theme.palette[props.color || 'primary'].main
}
});
...
export default injectSheet(styles)(AnyComponent);
import { JssProvider, jss, createGenerateClassName } from 'react-jss/lib';
import { MuiThemeProvider } from 'material-ui';
const generateClassName = createGenerateClassName();
...
<JssProvider jss={jss} generateClassName={generateClassName}>
<MuiThemeProvider theme={props.theme} sheetsManager={new Map()}>
<App/>
</MuiThemeProvider>
</JssProvider>
@chazsolo рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ https://github.com/cssinjs/jss/issues/682
рдзрдиреНрдпрд╡рд╛рдж @kof рдФрд░ @up209d - рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд┐рдпрд╛ рдФрд░ up209d рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдПрдХ рд╢реЙрдЯ рджрд┐рдпрд╛ред
@up209d
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ - рдореИрдВрдиреЗ рдЬреЛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ рдЙрд╕реЗ рдореИрдВрдиреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдореИрдВ styles
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдВрджрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рднреАрддрд░ рдкреНрд░реЛрдк рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд░рд╣рддреА рд╣реИрдВред рдореИрдВ рд╕рд┐рд░реНрдл рдкреНрд░рдХрд╛рд░ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реВрдБ? рдореИрдВ рдкреНрд░реЛрдк рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ WithStyles
рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдкреНрд░реЛрдк рдореЗрдВ classes
рдСрдмреНрдЬреЗрдХреНрдЯ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ (рдЕрдм рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ https://github.com/mui- рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рд╕рдорд╕реНрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ- org/material-ui/issues/8726#issuecomment-337482040)
TS2344: Type '(theme: ITheme) => { arc: { stroke: string; strokeWidth: (props: any) => string | number; }; arcM...' does not satisfy the constraint 'string | Record<string, CSSProperties> | StyleRulesCallback<string>'.
Type '(theme: ITheme) => { arc: { stroke: string; strokeWidth: (props: any) => string | number; }; arcM...' is not assignable to type 'StyleRulesCallback<string>'.
Type '{ arc: { stroke: string; strokeWidth: (props: any) => string | number; }; arcMovement: { strokeDa...' is not assignable to type 'Record<string, CSSProperties>'.
Property 'arc' is incompatible with index signature.
Type '{ stroke: string; strokeWidth: (props: any) => string | number; }' is not assignable to type 'CSSProperties'.
Types of property 'strokeWidth' are incompatible.
Type '(props: any) => string | number' is not assignable to type 'string | number | undefined'.
Type '(props: any) => string | number' is not assignable to type 'number'.
рдореЗрд░реА рдереАрдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
import { ITheme } from '...';
export default (theme: ITheme) => ({
arc: {
// ...
strokeWidth: (props: any): number | string => {
// this logs the correct data I'm expecting
console.log(props.data[0].properties.name)
return 1.5
}
},
arcMovement: {
// ...
},
})
рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдЬрдм рдореИрдВ рдЕрдкрдиреЗ рдШрдЯрдХ рдХреЗ рднреАрддрд░ classes
рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, arc
рдФрд░ arcMovement
рдорд╛рдиреНрдп рдЧреБрдг рд╣реИрдВ:
// from Chrome console
{
arc: "Arcs-arc-0-2-1 Arcs-arc-0-2-3",
arcMovement: "Arcs-arcMovement-0-2-2"
}
рдЕрджреНрдпрддрди
рдореИрдВ рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореБрдЭреЗ WithStyles
, withStyles
рд╕рднреА рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдФрд░ рдореИрдВ classes
рд░рдЪрдирд╛ рдФрд░ рд╡рд┐рд╖рдп рдЦреЛ рджреЗрддрд╛ рд╣реВрдВ рдШреЛрдВрд╕рд▓рд╛ рдмрдирд╛рдирд╛ рдореИрдВ рдЗрд╕реЗ рдЕрднреА рдЖрд░рд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реВрдВ рдФрд░ рдХреЗрд╡рд▓ рдзрд╛рдЧреЛрдВ рдкрд░ рдирдЬрд░ рд░рдЦрддрд╛ рд╣реВрдВред рдкреВрд░реА рд╕рд╣рд╛рдпрддрд╛рдХреЗ рд▓рд┐рдП рд╢реБрдХреНрд░рд┐рдпрд╛!
@chazsolo рдЕрд░реЗ style
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ props
рдХреЗ рдЕрдВрджрд░ classes
рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрд╕рдВрднрд╡ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ classes
рдХреЗрд╡рд▓ jss
рдмрд╛рдж style
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЙрдкрд▓рдмреНрдз рд╣реИ, рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдк classes
рддрдХ рдХреИрд╕реЗ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ classes
рднреА рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @caub рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдПрдХ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдмрд╕ рдереЛрдбрд╝рд╛ рдЯреНрд╡рд┐рд╕реНрдЯ рдХреЗ рд╕рд╛рде рдШреЛрд▓ рдХреЛ рджреЛрдмрд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВред рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд░реИрдкрд░ рдмрдирд╛рдПрдВ withStylesProps
ред
import { withStyles } from 'material-ui/styles';
const styles = ( theme, props ) => ({
exampleStyle: {
color: 'red' // <-- or try theme.palette.primary[600]
}
})
const withStylesProps = ( styles ) =>
Component =>
props => {
const Comp = withStyles(theme => styles(theme, props))(Component);
return <Comp {...props} />;
};
const YourComponent = ({ classes }) =>
<Typography type="display4" className={classes.exampleStyle}>{type}</Typography>
export default withStylesProps(styles)(YourComponent);
рдпрджрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП withStylesProps
рдмрдирд╛рдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдЬрд╣рд╛рдВ рдЪрд╛рд╣реЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВред
@iamthuypham рдЯрд┐рдк рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЬрдм рдореИрдВ рдЕрдкрдиреЗ рдШрдЯрдХ рдХреЛ withStylesProps
рд╕рд╛рде рд▓рдкреЗрдЯрддрд╛ рд╣реВрдВ, рддреЛ рд╕рдВрдХреНрд░рдордг рдШрдЯрдХ <Collapse
рдХреА рдПрдиреАрдореЗрд╢рди рдореИрдВ рд▓рд┐рдкрдЯреЗ рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ рдХрд╣реАрдВ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред
@ jdolinski1 рдХреНрдпрд╛ рдЖрдк рдЕрдкрдирд╛ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдХреЙрдкреА/рдкреЗрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
@iamthuypham рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рд╣рд░ рдмрд╛рд░ рдПрдХ рдШрдЯрдХ <style>
рдЯреИрдЧ рдмрдирд╛рдиреЗ рдХреА рдХрдореА рд╣реИред рд╕рд╛рде рд╣реА, рдЖрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯрдкреНрд░реЙрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕рд╛рд╡рдзрд╛рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ HOC'd рдШрдЯрдХ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рди рдХрд┐ рдореВрд▓ рдШрдЯрдХред
рдпрд╣ рд╕рдм react-jss
рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рдХреНрдпрд╛ рдЗрд╕реЗ рдореВрд▓ рд░реВрдк рд╕реЗ material-ui
рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
рд╕рд╛рде рд╣реА, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @ jdolinski1 рдХреА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдХреЛрдб children
рдХрд╛ рдкреНрд░рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд▓рдкреЗрдЯрд╛ рд╣реБрдЖ рдШрдЯрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
@iamthuypham рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЕрддреАрдд рдореЗрдВ рдРрд╕рд╛ рдХрд░рддрд╛ рдерд╛, рдФрд░ рдЬрдм рддрдХ рдРрдк рд╡рд┐рдХрд╛рд╕ рдмрд╣реБрдд рдЬрд▓реНрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рддрдХ рдЖрдк рдЦрд░рд╛рдм рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдирдП jss style
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде component
рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛ рдХреЛрдбрд┐рдВрдЧ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рджреГрд╖реНрдЯрд┐ рд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ style
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ, рдмрд╛рд░-рдмрд╛рд░, рд╣рд░ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рд╕рдордп рдкреНрд░рддрд┐ props
рдкрд░рд┐рд╡рд░реНрддрдиред injectSheet
рд╕реЗ react-jss
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдпрджрд┐ рдЖрдк injectSheet
рджреЗрдЦрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдЖрдкрдХреА style
рд╡рд╕реНрддреБ рдХреЛ 2 рдЯреБрдХрдбрд╝реЛрдВ ( static
рдФрд░ dynamic
) рдореЗрдВ рддреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ dynamic
рдЬрдм props
рдмрджрд▓рддреЗ рд╣реИрдВ рддреЛ рдлрд┐рд░ рд╕реЗ рд░реЗрдВрдбрд░ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
рдЗрдВрдЬреЗрдХреНрдЯрд╢реАрдЯ рдХреЗ рд╕рд╛рде рдЬреЗрдПрд╕рдПрд╕-рдиреЗрд╕реНрдЯреЗрдб рдЬреИрд╕реЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ?
рдЗрдВрдЬреЗрдХреНрд╢рдирд╢реАрдЯ рдХреЗ рд╕рд╛рде рдореБрдЭреЗ '&: рд╣реЛрд╡рд░' рдХрдерди рдХрд╛рдо рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред
рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдореИрдВ рд╕рд╣рд╛рд░рд╛ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ ...
@koutsenko рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
import React from "react";
import { makeStyles } from "@material-ui/styles";
import Button from "@material-ui/core/Button";
const useStyles = makeStyles({
root: {
background: props => props.color,
"&:hover": {
background: props => props.hover
},
border: 0,
borderRadius: 3,
color: "white",
height: 48,
padding: "0 30px"
}
});
export default function Hook() {
const classes = useStyles({
color: "red",
hover: "blue"
});
return <Button className={classes.root}>Hook</Button>;
}
https://codesandbox.io/s/pw32vw2j3m
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдпрд╣ рдорджрдж рдХрд░реЗрдЧрд╛ред
рд╡рд╛рд╣, рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИ рдХрд┐ рд╣рдордиреЗ ~1 рд╕рд╛рд▓ ЁЯШН рдореЗрдВ рдЬреЛ рдкреНрд░рдЧрддрд┐ рдХреА рд╣реИред
рдЕрдм рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ?
@stunaz рдЕрдЪреНрдЫрд╛ рд╕рд╡рд╛рд▓ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ред рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рдЧреМрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред @ eps1lon рдиреЗ рдореЙрдбреНрдпреВрд▓ рдХреА рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреА рд╣реИред рдЖрдк рдЗрд╕реЗ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
https://github.com/mui-org/material-ui/blob/f4281a77d15b0d6eec9d33cdc358cfb89844996d/packages/material-ui-styles/src/index.d.ts#L72
@koutsenko рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
рдзрдиреНрдпрд╡рд╛рдж @oliviertassinari , " react@next " рдХреЗ рд╕рд╛рде рдпрд╣ рдЕрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
@koutsenko рдпрджрд┐ рдЖрдк jss-nested
рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХреЗ, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рдорд╕реНрдпрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЪреВрдВрдХрд┐ jss-nested
рдХреЛ jss-default-preset
, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рд┐рд░реНрдл рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
@oliviertassinari
рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдк рдХреЗ рд╕рд╛рде рд╕рдВрдкреВрд░реНрдг рд╕реНрдЯрд╛рдЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рднреА рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЖрдк рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдХрд╣рд╛рдВ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣
withStyles({
root: {
'& > path': (props) => {
if(props.color)
return {
fill: props.color
};
return {};
}
}
})
рддрд╛рдХрд┐, рдпрджрд┐ рдкреНрд░реЛрдк рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдкрд┐рдЫрд▓реЗ рднрд░рдг рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдореБрдЭреЗ рдЗрд╕реЗ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдРрд╕реЗ рдЕрдиреНрдп рдирд┐рдпрдо рд╣реИрдВ рдЬреЛ рдЖрдо рддреМрд░ рдкрд░ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдХреЗрд╡рд▓ рдЗрд╕ рдирдИ рднрд░рдг рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдпрджрд┐ color
рдкреНрд░реЛрдк рд╕реЗрдЯ рд╣реИред
рдзрдиреНрдпрд╡рд╛рдж!
@Guardiannw рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЖрдкрдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ @kof рд╣рдорд╛рд░реЗ рдкреНрд░рдХрд╛рд╢ рдХреЛ рдмрдврд╝рд╛ рд╕рдХреЗ рдХреНрдпреЛрдВ ред рдЖрдк рдирд┐рдореНрди рдореЗрдВ рд╕реЗ рдХреЛрдИ рдПрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
// ЁЯПЖ
const useStyles = makeStyles({
root: {
"& > span": {
backgroundColor: props => props.color || null,
}
}
});
// or
const useStyles = makeStyles({
root: props => ({
"& > span": {
backgroundColor: props.color || null
}
})
});
@oliviertassinari рдореБрдЭреЗ withStyles
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реЛ рд░рд╣реА рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдХреЗрд╡рд▓ makeStyles
рдФрд░ рд╣реБрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
@Guardiannw рдпрд╣ @material-ui/styles
рдХрд┐рд╕реА рднреА рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред
@oliviertassinari рдПрдХ рдорд╛рдиреНрдп рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, fn рдорд╛рди v10 рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рдереЗ, рдЗрд╕рд▓рд┐рдП рдпрд╛ рддреЛ v9 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдпрд╛ рдореБрдЭреЗ рдХреЛрдбреИрдВрдбрдмреЙрдХреНрд╕ рдкреНрд░рдЬрдирди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдареАрдХ рд╣реИ, рдореИрдВрдиреЗ рдпрд╣реА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред рдлрд┐рд░ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдкрдбрд╝ рд╕рдХрддреА рд╣реИред
@oliviertassinari рдореЗрд░реЗ рдкрд╛рд╕ @ рдордЯреЗрд░рд┐рдпрд╛-рдпреВрдЖрдИ/рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдкреНрд░рд╢реНрди рд╣реИ, рдХреНрдпрд╛ рдпрд╣ рдЙрдкрд▓рдмреНрдз рд╣реИ рдФрд░ рдЙрддреНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП?, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ " 3.9.1", рдЙрджрд╛рд╣рд░рдг https://github.com/mui-org/material-ui/issues/8726#issuecomment -452047345 рдЬреЛ рдЖрдк рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕рдореЗрдВ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рдЙрдкрдпреЛрдЧреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрди рдореБрджреНрджреЛрдВ рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдХрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рджреЗрдЦреАрдВ рдФрд░ рдореБрдЭреЗ @caub рдХрд╛ рд╕рдорд╛рдзрд╛рди https://github.com/mui-org/material-ui/issues/8726#issuecomment -363546636 рдкрд╕рдВрдж рд╣реИ , рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рд╕рдорд╛рдзрд╛рди рдЕрдЪреНрдЫрд╛ рд╣реИред
@contrerasjf0 @material-ui/styles
рдХреЗрд╡рд▓ рдЕрд▓реНрдлрд╛ рд░рд┐рд▓реАрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред рд╣рдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреИрдХреЗрдЬреЛрдВ рдХреА рддрд░рд╣ рдЕрд▓реНрдлрд╛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдХрднреА рднреА рдЕрд▓реНрдлрд╛ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рд░рд┐рд▓реАрдЬ рдХреЗ рдмреАрдЪ рдмрдЧ рдФрд░ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдпрд╛рдиреА рдЖрдкрдХреЛ рдордВрдерди рдЕрд▓реНрдлрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд▓реЛрдЧ рдЙрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╛ рддреЛ рд╢реМрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рд╢рд╛рдЦрд╛ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рддреИрдирд╛рдд рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЙрддреНрдкрд╛рджрди рд╢рд╛рдЦрд╛ рдХреА рддрд░рд╣ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдЙрди рд╕рднреА рд▓реЛрдЧреЛрдВ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдЙрди рдЕрд▓реНрдлрд╛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ рдЙрдирдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддреЗ рд╣реИрдВред
@ up209d рд╣рд╛рдБ, рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рде
styles = { name: { cssprop: props => {} }
рд╕рдВрдХреЗрддрди, рдирд╣реАрдВ
styles = props => ({ name: { cssprop: {} })
рд╕рд╛рде рд╣реА, JssProvider рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред
@koutsenko
// at value level:
styles = { name: { cssprop: props => value }
styles = theme => ({ name: { cssprop: props => value })
// at class name level
styles = { name: props => ({ cssprop: value }) }
styles = theme => ({ name: props => ({ cssprop: value }) })
рдЖрдк рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ props
рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ theme
рдмрд╛рдж рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рднреА
рдореБрдЭреЗ рдПрдХ рд░рд╛рд╕реНрддрд╛ рдорд┐рд▓рд╛
// MyComponent.tsx
import React, { PureComponent } from 'react';
import { myComponentWithStyles } from './myComponentWithStyles';
export interface MyComponentProps {
copy: string;
size?: number;
}
export class Twemoji extends PureComponent<myComponentWithStyles> {
public render() {
const { copy, classes } = this.props;
return (
<div className={classes.message}>
{copy}
<img src="https://via.placeholder.com/150" />
</div>
);
}
}
// myComponentWithStyles.tsx
import React from 'react';
import { withStyles, WithStyles, Theme } from '@material-ui/core';
import { MyComponent, MyComponentProps } from './my-component';
const styles = (props: Theme & MyComponentProps) => ({
message: {
fontSize: props.typography.caption.fontSize,
'box-sizing': 'content-box',
'& img': {
width: `${props.size || 24}px`,
height: `${props.size || 24}px`,
padding: '0 4px',
verticalAlign: 'middle',
},
},
});
export type myComponentWithStyles = WithStyles<any>;
export const Component = (props: MyComponentProps) => {
const StyledComponent = withStyles((theme: Theme) => styles({ ...props, ...theme }))(
MyComponent
);
return <StyledComponent {...props} />;
};
md5-d0e1b51e375682cf2aad9c4d66b6c73a
<Component size={12} />
@andreasonny83 рдЗрд╕ рдкреИрдЯрд░реНрди рд╕реЗ рдмрдЪреЗрдВред рд╣рдо v4 рдореЗрдВ рдПрдХ рджреЗрд╢реА рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░ рд░рд╣реЗ рд╣реИрдВред
@oliviertassinari рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдХреНрдпрд╛ рд╡рд╣ рдкреИрдЯрд░реНрди рдкрд╣рд▓реЗ рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИ? рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬ рдЙрдкрд▓рдмреНрдз рд╣реИ?
https://next.material-ui.com/css-in-js/basics/#adapting -based-on-props
рдПрдХ рдЖрдЦрд┐рд░реА рд╕рд╡рд╛рд▓ @oliviertassinari ред рдХреНрдпрд╛ рдореИрдВ makeStyles
рдХреЛ withStyles
рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?
рдореБрдЭреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдЬреЛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ:
const useStyles = makeStyles({
message: {
boxSizing: 'content-box'
}
});
export const ComponentWithStyles = withStyles(useStyles())(MyComponent);
@andreasonny83
makeStyles
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╣реБрдХ рдХреЗ рд▓рд┐рдП рд╣реИwithStyles
HOC рд╕рдорд╛рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИрдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдмрд╕ makeStyles
рд╣рдЯрд╛ рджреЗрдВ:
const styles = { message: {boxSizing: 'content-box', background: props => props.bg} };
export const ComponentWithStyles = withStyles(styles)(MyComponent);
Gday рд▓реЛрдЧреЛрдВ рдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдЖрдИрдбреА рдЙрдкрд░реЛрдХреНрдд рдЪрд░реНрдЪрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдореЗрд░реЗ рд╡рд░реНрддрдорд╛рди рд╕рдорд╛рдзрд╛рди рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рддреА рд╣реИ, рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдХреЛрдИ рдореЗрд░реЗ рд╡рд░реНрддрдорд╛рди рд╕рдорд╛рдзрд╛рди рдкрд░ рдмреЗрд╣рддрд░ рд╕рд▓рд╛рд╣ рджреЗ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░реЗ рд╕рд╛рдЗрдирдЗрди рдкреЗрдЬ рдЖрдИрдбреА рдХреЗ рд▓рд┐рдП рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкреГрд╖реНрдарднреВрдорд┐ рдЫрд╡рд┐ рдХреА рддрд░рд╣ рд▓реЗрдХрд┐рди рдЖрдИрдбреА рдЕрднреА рднреА рд╕рд╛рдордЧреНрд░реА рдпреВрдЖрдИ рдПрдкреАрдЖрдИ рдХреА рд╢рдХреНрддрд┐ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдкрд╕рдВрдж рдХрд░рддреА рд╣реИред рдСрдердкреЗрдЬ рд╕рд┐рд░реНрдл рдкреИрд░реЗрдВрдЯ рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рди рд▓реЗрдпрд░ рд╣реИ рдЬреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдСрде рдШрдЯрдХреЛрдВ (рд╕рд╛рдЗрдирдЗрди, рд▓реЙрдХ, рднреВрд▓-рдкрд╛рд╕рд╡рд░реНрдб, рдкрд╛рд╕рд╡рд░реНрдб-рд░реАрд╕реЗрдЯ, рдЖрджрд┐) рдХреЛ рдмрдЪреНрдЪреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИред рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда AuthPageContainer рдкреНрд░реЛрдк рдХреЗ рднреАрддрд░ рдПрдХ рдирдП рдкреГрд╖реНрдарднреВрдорд┐ рд▓реЛрдб рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдПрдХ рдЕрдЪреНрдЫреЗ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдкреНрд░реЙрдкреНрд╕ рдХреЛ рддрд╛рдЬрд╝рд╛ рдХрд░рддрд╛ рд╣реИ
// AuthPage.styles.tsx
import { Container } from "@material-ui/core";
import { ContainerProps } from "@material-ui/core/Container";
import { withStyles } from "@material-ui/core/styles";
import React from "react";
interface IAuthContainerProps extends ContainerProps {
background: string;
}
export const AuthContainer = withStyles({
root: props => ({
alignItems: "center",
backgroundImage: `url(${props.background})`,
backgroundPosition: "50% 50%",
backgroundRepeat: "no-repeat",
backgroundSize: "cover",
display: "flex",
height: "100vh",
justifyContent: "center",
margin: 0,
padding: 0,
width: "100%"
})
})((props: IAuthContainerProps) => <Container maxWidth={false} {...props} />);
// AuthPage.tsx
import React from "react";
import forest from "../../assets/backgrounds/forest.jpg";
import sky from "../../assets/backgrounds/sky.jpg";
import uluru from "../../assets/backgrounds/uluru.jpg";
import { AuthContainer } from "./AuthPage.styles";
const AuthPage = ({ children }) => {
const generateBackground = () => {
const backgrounds = [forest, sky, uluru];
const index = Math.floor(Math.random() * backgrounds.length);
return backgrounds[index];
};
return (
<AuthContainer background={generateBackground()}>{children}</AuthContainer>
);
};
export default AuthPage;
рдмрд╕ рдХреБрдЫ рдРрд╕рд╛ рдХрд░реЗрдВ:
// styles.js
export default theme => ({
root: props => ({
// some styles
}),
...
});
//container.js
export default withStyles(styles)(MyComponent);
рд░рд╛рдЬреНрдп рднреА рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
@ рд▓рдХреНрдХреА1984
рдЖрдк рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
// Component.js
<Button
className={`
${classes.button}
${this.state.isEnable
? classes.enable
: classes.disable}
`}
/>
рдпрд╛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп clsx https://www.npmjs.com/package/clsx рдХрд╛ рдЙрдкрдпреЛрдЧ
@caub рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдЬреЗрдПрд╕рдПрд╕ рдЬреЗрдирд░реЗрдЯреЗрдб рдХреНрд▓рд╛рд╕рдирд╛рдо рдСрд░реНрдбрд░ рдХреЛ рдмрд░реНрдмрд╛рдж рдХрд░ рджреЗрддрд╛ рд╣реИред
рдЬреИрд╕реЗ рдпрд╣рд╛рдБ рд▓рд┐рдЦрд╛ рд╣реИ: https://github.com/mui-org/material-ui/issues/8726#issuecomment -363546636
рдореИрдВрдиреЗ рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХрд╛ рдПрдЪрдУрд╕реА рдШрдЯрдХ (рд╕реНрдЯрд╛рдЗрд▓реНрд╕рдкреНрд░реЙрдкреНрд╕ рдХреЗ рд╕рд╛рде) рд╕рдорд╛рдзрд╛рди рдЗрд╕рдХреЗ рд╕рд╛рде рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рдХреЙрд▓ рдореЗрдВ рджреЗрд░реА рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд▓рдкреЗрдЯрд╛ рд╣реБрдЖ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдХреНрд▓рд╛рд╕рдирд╛рдо рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рдирд╛ рд╕реАрдПрд╕рдПрд╕ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЬреИрд╕реЗ: https://codesandbox.io/s/hocs-8uhw1?file=/index.js
рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб #0000000 рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд░рдВрдЧ: рдиреАрд▓рд╛
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@oliviertassinari рдпрд╣ рд╕реБрдирдХрд░ рдмрд╣реБрдд рд╕реБрдХреВрди рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ! рдЗрд╕рд╕реЗ рдШрдЯрдХреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп рдЖрдХрд╛рд░ (рдпрд╛рдиреА рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ) рдХреЗ рд╕рд╛рде рдПрдХ рдЪреЗрдХрдмреЙрдХреНрд╕ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:
рдЕрдЧрд░ рд╣рдо
props
рдореЗрдВstyles
, рддреЛ рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛:рдпрд╛
рдФрд░ рдлрд┐рд░:
рдЕрднреА рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╛ рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдЕрдиреБрдорд╛рди рд╣реИ рдХрд┐ рдЖрдк рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдкреНрд░реЙрдкреНрд╕ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ?