рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ withStyles()
рд╣реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд▓реМрдЯрд╛рдП рдЧрдП рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ:
Type '{}' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes<App> & Readonly<{ children?: ReactNode; }> & Reado...'.
Type '{}' is not assignable to type 'Readonly<WithStyles<"main">>'.
Property 'classes' is missing in type '{}'.
рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП App
рдШрдЯрдХ рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ 1.0.0-рдмреАрдЯрд╛.10 рдореЗрдВ рдХрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд┐рдирд╛ рдШрдЯрдХ <App />
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП App
рдШрдЯрдХ рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЙрдкрд░реЛрдХреНрдд рддреНрд░реБрдЯрд┐ рдореЗрдВ <App />
рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
import * as React from 'react';
import { withStyles } from 'material-ui/styles';
const styles = {
main: {
marginTop: 48,
padding: 10,
},
foo: {
margin: 0,
},
};
interface Props {
message: string;
};
type ClassNames = { classes: { [className in keyof typeof styles]: string } };
class App extends React.Component<Props & ClassNames> {
render() {
const { classes, message } = this.props;
return (
<div className={classes.main}>
<div className={classes.foo} >
Hello World! {message}
</div>
</div>
);
}
}
export default withStyles(styles)(App);
1.0.0-рдмреАрдЯрд╛.10 рдореЗрдВ рдХреЛрдб рдиреЗ рдареАрдХ рдХрд╛рдо рдХрд┐рдпрд╛, рдЬрдм рдореИрдВрдиреЗ 1.0.0-рдмреАрдЯрд╛.12 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рддреЛ рдореБрдЭреЗ рдЯрд╛рдЗрдк рддреНрд░реБрдЯрд┐ рдорд┐рд▓реАред
рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ рдореИрдВрдиреЗ keyof typeof styles
рдЪрд╛рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рдореБрдЭреЗ рджреЛ рдмрд╛рд░ рд╡рд░реНрдЧ рдирд╛рдореЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛ (рдореИрдВ рджреЛрд╣рд░рд╛рд╡ рдХреЛ рджреГрдврд╝рддрд╛ рд╕реЗ рдирд╛рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ)ред рдореИрдВрдиреЗ рдЕрдиреНрдп рд╡рд┐рд╡рд┐рдзрддрд╛рдУрдВ рдХреА рднреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ:
type ClassNames = WithStyles<keyof typeof styles>;
рдФрд░ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдХрд░рдирд╛ (рдЬреИрд╕рд╛ рдХрд┐ style.spec.tsx рдореЗрдВ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ):
type ComponentClassNames = 'main' | 'foo';
type ClassNames = WithStyles<ComponentClassNames>;
рдореБрдЭреЗ рдЕрдм рднреА рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд┐рдЫрд▓реА рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдПрдХ рдШрдЯрдХ рд▓реМрдЯрд╛рдПрдЧреА рдЬрд┐рд╕рдХрд╛ рдкреНрд░реЛрдк рдкреНрд░рдХрд╛рд░ StyledComponentProps
рдЬрд┐рд╕рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ classes
рд╕рдВрдкрддреНрддрд┐ рд╣реЛрдЧреАред рдирдИ рдкрд░рд┐рднрд╛рд╖рд╛...
<P, C extends React.ComponentClass<P & StyledComponentProps<Names>>>(
component: C
): C;
...рдЙрд╕реА рдкреНрд░рдХрд╛рд░ C
рдХреЛ рдШрдЯрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ ClassNames
рдЬреЛ рдХрд┐ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реМрдЯрд╛ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдпрд╣рд╛рдВ Partial<>
рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рднрджреНрджрд╛ рд╣реИрдХ рд╣реИред
| рдЯреЗрдХ | рд╕рдВрд╕реНрдХрд░рдг |
|--------------|------------|
| рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ | 1.0.0-рдмреАрдЯрд╛.12 |
| рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ | резрел.рем.рез |
| рдмреНрд░рд╛рдЙрдЬрд╝рд░ | рдХреНрд░реЛрдо ремрез.реж.рейрезремрей.резрежреж |
@cfilipov рдПрдХ рдШрдЯрдХ рд╡рд░реНрдЧ рдХреЛ StyledComponentProps
рдмрдЬрд╛рдп WithStyles
рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрджрд┐ рд╕рдЦреНрдд рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдореЛрдб рдореЗрдВ рдЖрдкрдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреИрд░-рд╢реВрдиреНрдп рджрд╛рд╡рд╛ рдСрдкрд░реЗрдЯрд░ !
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ classes
ред рдХреНрд▓рд╛рд╕ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ withStyles
рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рд╕рдордЭреМрддрд╛ рд╣реИред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреНрд▓рд╛рд╕ рдбреЗрдХреЛрд░реЗрдЯрд░ рдЗрд╕ рд╕реАрдорд╛ рд╕реЗ рдЧреНрд░рд╕реНрдд
withStyles
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рди рдХрд░реЗрдВclasses
рдкреНрд░реЛрдк рдкрд╛рд╕ рдХрд░реЗрдВ (рдкрд┐рдЫрд▓рд╛ рд╕рдордЭреМрддрд╛, рдЬреЛ рдпрдХреАрдирди рдЕрдзрд┐рдХ рдХрд╖реНрдЯрдкреНрд░рдж рдерд╛ )classes
рдХреЛ рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ рдЕрд╢рдХреНрдд рдорд╛рдирд╛ рдЬрд╛рдП, рдЬрд┐рд╕рд╕реЗ рдЖрдкрдХреЛ !
рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬрдм рдЖрдк рдЗрд╕рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ ( рд╡рд░реНрддрдорд╛рди рд╕рдордЭреМрддрд╛ ) рддрдХ рдореИрдВ рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрджрд┐ рдЖрдкрдХреЗ рдШрдЯрдХ рдореЗрдВ рдХреЛрдИ рд░рд╛рдЬреНрдп рдирд╣реАрдВ рд╣реИ рддреЛ рдЖрдк рдПрдХ рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХрдо рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдЧрд╛:
export default withStyles(styles)<Props>(({ classes, message }) => (
<div className={classes.main}>
<div className={classes.foo}>
Hello World! {message}
</div>
</div>
));
рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдЖрдВрд╢рд┐рдХ <> рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛
рдпрджрд┐ рдЖрдк рдЙрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдлреЙрд▓реЛрдЕрдк рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ Partial<>
рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдпрджрд┐ рдЖрдк рдЙрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдлреЙрд▓реЛрдЕрдк рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЖрдВрд╢рд┐рдХ<> рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдореИрдВрдиреЗ Partial<>
рд╕рдВрдмрдВрдз рдореЗрдВ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреАред StyledComponentProps
рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИ (рдпрд╣ рдЙрд╕ рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ Partial<>
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ)ред рдЗрд╕рдХреЗ рд╕рд╛рде рдореЗрд░реА рдкрдХрдбрд╝ рдЕрдм рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо !
(рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ) рдХреЗ рд╕рд╛рде рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдбрдореА classes
рдкреНрд░реЛрдк рдкрд╛рд╕ рдХрд░рдирд╛ рдпрд╛ !
рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рджреЛрдиреЛрдВ рдЦрд░рд╛рдм рд╕рдордЭреМрддрд╛ рд╣реИрдВред
рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЬреЛ рдореВрд▓ рдореБрджреНрджрд╛ рд╣реИ рд╡рд╣ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдПрдХ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕реБрд╡рд┐рдзрд╛ рдХреА рд╕реАрдорд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдореЗрдВ рд╣реЙрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдЧрдорди рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдореИрдВ рдХреБрдЫ рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣реЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ, рдЬрдмрдХрд┐ рдЕрдиреНрдп рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЯреНрд░реЗрдбрдСрдлрд╝ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред
@cfilipov withStyles
рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд░рд┐рдлреИрдХреНрдЯрд░ рд╡рд┐рдХрд▓реНрдк (1) рдЪреБрдирдирд╛ рдерд╛, рдпрд╛рдиреА рдХреНрд▓рд╛рд╕ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ withStyles
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреАрдордд рдкрд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рдХреНрд▓рд╛рд╕ рдФрд░ рдлрдВрдХреНрд╢рди рджреЛрдиреЛрдВ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рдмрдирд╛рдирд╛ рдерд╛ред . рдореБрдЭреЗ рддрдм рдлреАрдбрдмреИрдХ рдорд┐рд▓рд╛ рдХрд┐ рдбреЗрдХреЛрд░реЗрдЯрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рдЕрдиреБрд░реЛрдз рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╡рд┐рдХрд▓реНрдк (3) рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рдЙрд╕ рдирд┐рд░реНрдгрдп рдкрд░ рдлрд┐рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рд╕рдиреНрдирддрд╛ рд╣реЛ рд░рд╣реА рд╣реИ; рдореИрдВ рднреА рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ рдХреЛ рдЙрдирдХреА рд╡рд░реНрддрдорд╛рди рдЕрд░реНрдз-рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рд╕реБрд░рдХреНрд╖рд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред
рд╣рд╛рдБ, рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рдЕрдиреБрд░реЛрдз рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдБред рдореИрдВ рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рд╣рд░ рдмрд╛рд░ (рдореБрдИ рдХреЗ рдмрд╛рд╣рд░) рдЙрдирдХреЗ рд╕рд╛рде рдХрдИ рдореБрджреНрджреЛрдВ рдореЗрдВ рднрд╛рдЧрддрд╛ рд░рд╣рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рддрдХ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЬрдм рддрдХ рдХрд┐ рд╡реЗ рддреИрдпрд╛рд░ рди рд╣реЛрдВред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдореЗрд░реА рдЪрд┐рдВрддрд╛ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЗрд╕рд▓рд┐рдП рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрдиреНрдп рд▓реЛрдЧ рдЗрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЗрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓ рд╕рдХреЗред
рдореИрдВрдиреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмреАрдЯрд╛.13 рд╕реЗ рдмреАрдЯрд╛.13 рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдХрд┐ рдХреНрдпрд╛ рдХреБрдЫ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╣рд╛рдБ рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореБрджреНрджрд╛ рд╣реИред рдореЗрд░реЗ 2 рд╕реЗрдВрдЯ рдпрд╣рд╛рдВ рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рд▓рд┐рдП, рд╕рдЬреНрдЬрд╛рдХрд╛рд░ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╣реИрдВред рд╡реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмрджрд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рддрдм рддрдХ рдореИрдВ 100% рд╕рдЯреАрдХ рддрд░реАрдХреЗ рдХрд╛ рдкреВрд░рд╛ рд╕рдорд░реНрдерди рдХрд░реВрдВрдЧрд╛ред рдЪреАрдЬреЛрдВ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╣реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рд╕реБрд╕рдВрдЧрдд рдкреНрд░рдХрд╛рд░ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рд╣реЛрдЧреАред
@withStyles()
рдХреЛ рдбреЗрдХреЛрд░реЗрдЯрд░ (рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ) рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПредрдпрджрд┐ рд╣рдо рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рд╕рд╣реА рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдПрдХ рд╡рд░реНрдЧ рдХреЛ "рд╕рдЬрд╛рдиреЗ" рдЬреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:
type NonStyleProps = {
text: string
};
const styles = {
root: {
backgroundColor: 'red'
}
};
const DecoratedComponent = withStyles(styles)(
class extends React.Component<NonStyleProps & WithStyles<'root'>> {
render() {
return (
<div className={this.props.classes.root}>
{this.props.text}
</div>
);
}
}
);
@pelotom рдореБрдЭреЗ рдЕрднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдХрд╛рд░рдг рдмреАрдЯрд╛.10 рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдирд╛ рд╣реИред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ Redux рдХреА рдХрдиреЗрдХреНрдЯ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдХреА рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдХреА рдереАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЖрд╕рд╛рди рдФрд░ рдордЬрдмреВрдд рд╣реИред #8059 рдореЗрдВ рддреАрд╕рд░реА рдЯрд┐рдкреНрдкрдгреА рд╕реНрд╡рдпрдВ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╣реИред
@pelotom рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╣рдореЗрдВ рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ TS рдбреЗрдХреЛрд░реЗрдЯрд░реНрд╕ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореБрдЭреЗ рдмреЗрд╣рддрд░ рдкреНрд░рдХрд╛рд░ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП withStyles
рд▓рд┐рдП рдЗрд╕рдХреЗ рдбреЗрдХреЛрд░реЗрдЯрд┐рдВрдЧ рд╕рдкреЛрд░реНрдЯ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред
рд╣рдореЗрдВ рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ (рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ) рдХреЗ рд░реВрдк рдореЗрдВ @withStyles() рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
@pelotom рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕ рдмрджрд▓рд╛рд╡ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВред @sebald рдЖрдк рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ; рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдореИрдВрдиреЗ рдЖрдЧреЗ рдмрдврд╝рдХрд░ рдПрдХ рдкреАрдЖрд░ рдЦреЛрд▓рд╛
@pelotom typings рдЕрднреА рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рддрд░рд╣ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛?
interface IStyles {
// styles interface
}
interface IHeaderInfoStyles {
classes: any;
}
interface IHeaderInfoProps {
// properties resulting from dispatches
}
interface IHeaderInfoInjectedProps {
// props injected from parent if any
}
interface IHeaderInfoDispatchProps {
// dispatches
}
interface IHeaderInfoState {
// your state for the class
}
type HeaderInfoProps = IHeaderInfoProps & IHeaderInfoInjectedProps & IHeaderInfoDispatchProps & IHeaderInfoStyles;
class HeaderInfo extends Component<HeaderInfoProps, IHeaderInfoState> {
export const HeaderInfo_container = withStyles<IHeaderInfoInjectedProps, IStyles>(styles)(
connect<IHeaderInfoProps, IHeaderInfoDispatchProps, (IHeaderInfoInjectedProps & IHeaderInfoStyles)>(mapStateToProps, mapDispatchToProps)(HeaderInfo),
);
@marcusjwhelan withStyles
рдЕрдм 2 рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЗрд╕реЗ styles
рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЖрдкрдХреЛ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
withStyles(styles)<NonStyleProps>(...);
рдпрджрд┐ рдЖрдк mapStateToProps
рдФрд░ mapDispatchToProps
рдореИрдВ рдЖрдкрдХреЛ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛ред
рдЯреАрдПрд▓; рдбреЙ; рдЪрд▓реЛ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреНрдпрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ
@oliviertassinari @pelotom _(уГД)_/┬п рдореИрдВ рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛, рдЗрд╕рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдмрджрд▓рд╛рд╡ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реВрдВред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЗрд╕ "рдлреАрдЪрд░" рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рдЬреЛрдбрд╝рд╛ред рдпрд╣реА IMHO рд╣реИ рдЬрд┐рд╕рдХреА рдпрд╣рд╛рдБ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИред
рдореИрдВ withStyles
рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдмрд╣реБрдд рдЦреБрд╢ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдЕрдиреНрдп рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ ramda
рдпрд╛ recompose
, рддреЛ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдЙрддрдиреА рд╕рдЦреНрдд рдирд╣реАрдВ рд╣реИ, рди рд╣реА рд╡реЗ рд╕реБрдкрд░ рдЯрд╛рдЗрдк-рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИрдВред рдЕрдХреНрд╕рд░ рдмрд╛рд░ рдЖрдкрдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдореЗрдВ рдЧреБрдЬрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ 99.9% рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рд╣рдо рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкреБрд░рд╛рдиреА рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рд╡рд╛рдкрд╕ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рджреЛ рдЬреЗрдирд░рд┐рдХ рдереЗ, рд╣рдо рджреЛрдиреЛрдВ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рд╕рд╛рде-рд╕рд╛рде рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рд╛рде рд╣реА, рдореИрдВ рдереЛрдбрд╝рд╛ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдВ рдХрд┐ рд╕рдЬрд╛рд╡рдЯреА рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд▓реЛрдЧреЛрдВ рдХреЗ рдореБрджреНрджреЗ рдХреНрдпрд╛ рд╣реИрдВ ("рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ" рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ)ред рдПрдВрдЧреБрд▓рд░ рдФрд░ https://nestjs.com/ рдЬреИрд╕реЗ рд▓рд┐рдмреНрд╕ рдЖрдЦрд┐рд░рдХрд╛рд░ рдЙрдирдХрд╛ рднрд╛рд░реА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓реЛрдЧ рдХреЗрд╡рд▓ рд╕рд╣рд╛рд░рд╛ рдореЗрдВ WithStyles
рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдареАрдХ рд╣реИрдВред
@рд╕реЗрдмрд╛рд▓реНрдб
рд╣рдо рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкреБрд░рд╛рдиреА рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рд╡рд╛рдкрд╕ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рджреЛ рдЬреЗрдирд░рд┐рдХ рдереЗ, рд╣рдо рджреЛрдиреЛрдВ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рд╕рд╛рде-рд╕рд╛рде рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рддреБрдореНрд╣рд╛рд░рд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдРрд╕рд╛ рдХреЛрдИ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрднреА рдирд╣реАрдВ рдерд╛ рдЬреЛ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рдЬреНрдЬрд╛рдХрд╛рд░ рдХрд╛ рджрд░реНрдж рд░рд╣рд┐рдд рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реЛред рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди #8267 рд╕реЗ рд╣реБрдЖ, рдЬреЛ рдпрд╣ рдерд╛ рдХрд┐ рдЖрдк рдПрдХ рдбрдореА classes
рдкреНрд░реЛрдк рдкрд╛рд░рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рд╕рдЬрд╛рдП рдЧрдП рдШрдЯрдХ рдХреЗ рддрддреНрд╡ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд░ рд╕рдХреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП <StyledComp classes={{} as any} />
ред рджреВрд╕рд░рд╛ (рд╡рд░реНрддрдорд╛рди) рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдкрд░реАрдд рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдЧреНрд░рд╕реНрдд рд╣реИ, рдХрд┐ рдШрдЯрдХ рд╡рд░реНрдЧ рдХреЗ рднреАрддрд░ classes
рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ undefined
рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрдХреЛрд░реЗрдЯрд░реНрд╕ рдХреЛ рдЙрдирдХреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрд╡рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ 2 рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ; рдЕрдкрдирд╛ рдЬрд╝рд╣рд░ рдЙрдард╛рдПрдВред
рддреАрд╕рд░рд╛ рддрд░реАрдХрд╛ рд╕рд╣реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддрд╛рдХрд┐ classes
рдХреЛ рдХрдХреНрд╖рд╛ рдХреЗ рднреАрддрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рд▓реЗрдХрд┐рди рдПрдХ рдкреНрд░реЛрдк рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЙрди рджреЛрдиреЛрдВ рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред
@pelotom рд╣рд╛рдБ, рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдЖрдк рд╕рд╣реА рд╣реЗред рд╕рдЪ рдореЗрдВ рдореЗрд░рд╛ рджрд┐рди рдирд╣реАрдВ рд╣реИ... рддреЛ рдЪрд▓реЛ рд╡рд┐рд▓реАрди рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ!
@рд╕реЗрдмрд╛рд▓реНрдб
рд╕рд╛рде рд╣реА, рдореИрдВ рдереЛрдбрд╝рд╛ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдВ рдХрд┐ рд╕рдЬрд╛рд╡рдЯреА рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд▓реЛрдЧреЛрдВ рдХреЗ рдореБрджреНрджреЗ рдХреНрдпрд╛ рд╣реИрдВ ("рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ" рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ)ред рдПрдВрдЧреБрд▓рд░ рдФрд░ https://nestjs.com/ рдЬреИрд╕реЗ рд▓рд┐рдмреНрд╕ рдЖрдЦрд┐рд░рдХрд╛рд░ рдЙрдирдХрд╛ рднрд╛рд░реА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рдХреЛрдгреАрдп рдореЗрдВ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕рдЬрд╛рд╡рдЯреА рдХрд╛ рджрд░реНрдж рд░рд╣рд┐рдд рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдореВрд▓ рд░реВрдк рд╕реЗ рдпрджрд┐ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЛ рдЙрд╕ рд╡рд░реНрдЧ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд╣ рд╕рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рд╡реЗ рдареАрдХ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдВ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдирд╣реАрдВ рд╣реИ; withStyles
рдХреЛ рдЙрд╕ рдШрдЯрдХ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдЬрд┐рд╕реЗ рд╡рд╣ рд╕рдЬрд╛рддрд╛ рд╣реИред
@pelotom рд╣рд╛рдБ, рдмрд┐рд▓реНрдХреБрд▓ред рдпрд╣ рд╕рд┐рд░реНрдл рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рд╣реИ рдЬреЛ рдЦрд░рд╛рдм рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ TS рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдбреЗрдХреЛрд░реЗрдЯрд░ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдХреЛрдгреАрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдХреЛрд░реЗрдЯрд░ AFAIK рдиреЗ рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдЕрдиреБрдмрдВрдз рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЬреИрд╕реЗ "рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдПрдХ рдШрдЯрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ" рдпрд╛ "рдореЗрдЯрд╛ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝реЗрдВ рддрд╛рдХрд┐ рдореИрдВ рдЗрд╕реЗ DI рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреВрдВ "... рднрдЧрд╡рд╛рди рднреА рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ
@pelotom рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореЗрд░реЗ рдкрд╛рд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ, рд╡рд╣ рдореЗрд░реЗ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЬрдм рдШрдЯрдХреЛрдВ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ рддреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдХреЛрдИ рдкреНрд░рдХрд╛рд░ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЗрдВрдЬреЗрдХреНрд╢рдирдкреНрд░реЙрдкреНрд╕ рд╡реЗ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ рдЬреЛ рдШрдЯрдХ рджреНрд╡рд╛рд░рд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред рдХрдиреЗрдХреНрдЯ рдХреЗ рдкреНрд░рдХрд╛рд░ react-redux
рд╕реЗ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдХрд┐ mapStateToProps рдФрд░ DispatchProps рд╕реЗ рдЖрддреЗ рд╣реИрдВ рдЬреЛ mapDispatchToProps рд╕реЗ рдЖрддреЗ рд╣реИрдВред
рдЕрдВрдд рдореЗрдВ рдЗрдВрдЬреЗрдХреНрд╢рдирдкреНрд░реЙрдк рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдореЗрд░реЗ рдореВрд▓ рдШрдЯрдХ рдХреЛ рдкрддрд╛ рдЪрд▓реЗ рдХрд┐ рдореБрдЭреЗ рдЙрдиреНрд╣реЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧреАред (рдЗрд╕реА рд╕рдм рдХреА рдореЗрд░реА рдЗрдЪреНрдЫрд╛ рдереА)ред рдХреНрдпрд╛ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдореЗрдВ рд╡рд╛рдкрд╕ рдорд╛рдЗрдЧреНрд░реЗрдЯ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?
@marcusjwhelan рдлрд┐рд░ рд╕реЗ, рдпрджрд┐ рдЖрдк рдПрдХ рдкреВрд░реНрдг (рд▓реЗрдХрд┐рди рдиреНрдпреВрдирддрдо) рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдмреАрдЯрд╛ 10 рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдерд╛, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХреИрд╕реЗ рдХрд░реЗрдВред AFAIK рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣рд░ рддрд░рд╣ рд╕реЗ рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ рдФрд░ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
@pelotom рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдкреНрд░рд╢реНрди, рдХреНрдпрд╛ рдХреЛрдИ рдРрд╕рд╛ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореБрдЭреЗ рдирдИ рд░рд┐рд▓реАрдЬрд╝ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
@wcandillon рд╣рдореЗрдВ рдЯреНрд╡рд┐рдЯрд░ рдкрд░
@pelotom рдореИрдВрдиреЗ рдКрдкрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ ... рдЖрдкрдХреЛ рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реЛрдЧреА? рдЖрдк рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЧреБрдг рдП, рдмреА, рд╕реА, рдбреА, рдИ рд╣реИрдВред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдпрд╣ рд╣реИ рдХрд┐ рдЗрдВрдЬреЗрдХреНрд╢рди рд╡рд╛рд▓реЗ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдореИрдВ рдпрд╣ рд╕рдордЭ рдЧрдпрд╛ред
рдореИрдВ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдереЛрдбрд╝реА рджреЗрд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдХ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдореИрдВ [email protected]
рдФрд░ [email protected]
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
const LoginForm = withStyles(styles)(
class extends React.Component<WithStyles<'root' | 'button'>, ILoginFormState> {
// ...
}
);
render(
<MuiThemeProvider theme={theme}>
<LoginForm />
</MuiThemeProvider>,
document.getElementById('login-form')
);
рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ рдореБрдЭреЗ рдЬреЛ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рд╣реИ:
Type '{}' is not assignable to type 'IntrinsicAttributes & WithStyles<"root" | "button"> & StyledComponentP...'.
Type '{}' is not assignable to type 'WithStyles<"root" | "button" | "progress" | "textField">'.
Property 'classes' is missing in type '{}'.
not assignable to type 'WithStyles<"root" | "button" | "progress" | "textField">'.
Property 'classes' is missing in type '{}'.
рдШрдЯрдХ рд╡рд░реНрдЧ рдХреЛ рд╕рдЬрд╛рддреЗ рд╕рдордп рдЖрдкрдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рдмрдЬрд╛рдп рд╕реНрдЯрд╛рдЗрд▓ рдХреЙрдореНрдкреЛрдиреЗрдВрдЯрдкреНрд░реЙрдкреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
@pelotom - рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдХрд╣реАрдВ рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИ? рдореБрдЭреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рд╕реНрдЯреЗрдЯрдлреБрд▓ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреНрд▓рд╛рд╕ рдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдкрд░реЗрд╢рд╛рдиреА рд╣реЛ рд░рд╣реА рд╣реИред
@iamjem рдпрд╣ рдмрддрд╛рдирд╛ рдереЛрдбрд╝рд╛ рдХрдард┐рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ styles
рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓рд╛ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ styles
рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рдЕрдзрд┐рдХ рд╡рд░реНрдЧ рдХреБрдВрдЬрд┐рдпрд╛рдБ рд╣реИрдВ рдЬреЛ рдЖрдк WithStyles<...>
рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
const LoginForm = withStyles(styles)(
class extends React.Component<WithStyles<keyof typeof styles>, ILoginFormState> {
// ...
}
);
рдЗрд╕реЗ рдкрд╣рд▓реЗ рдореБрджреНрджреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рддрдм рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рджреВрд╕рд░рд╛ рдореБрджреНрджрд╛ рд╣реИ, рдЬреЛ рдпрд╣ рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдореА рдкреНрд░рдХрд╛рд░ рдХрд╛ LoginForm
is
React.ComponentType<WithStyles<"root" | "button"> & StyledComponentProps<"root" | "button">>
рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ; рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧреИрд░-рд╢реИрд▓реА рд╡рд╛рд▓реЗ рдкреНрд░реЙрдкреНрд╕ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдХреЛ рднреНрд░рдорд┐рдд рдХрд░ рд░рд╣реА рд╣реИред рдЖрдк {}
рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рдХреЗ, рдЧреИрд░-рд╢реИрд▓реА рдХреЗ рдкреНрд░реЛрдк рдХреНрдпрд╛ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
const LoginForm = withStyles(styles)<{}>( // <-- note the type argument
class extends React.Component<WithStyles<keyof typeof styles>, ILoginFormState> {
// ...
}
);
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдпрд╣ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИ, рдХрд╛рд╢ рдореБрдЭреЗ рдЗрд╕ рд╕рд╛рдорд╛рди рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдкрддрд╛ рд╣реЛрддрд╛!
рдпрд╣реА рдЪрд╛рд▓ рдЪрд▓реА! рддреНрд╡рд░рд┐рдд рд╕рд╣рд╛рдпрддрд╛ @pelotom рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд░рд┐рдПрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдордЯреЗрд░рд┐рдпрд▓-рдпреВрдЖрдИ рдореЗрдВ рдХреВрдж рдЧрдпрд╛, рдФрд░ рд╕реЛрдЪрд╛ рдХрд┐ рдЬрдм рдореИрдВ рдЗрд╕рдореЗрдВ рд╣реВрдВ рддреЛ рдореИрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред рдХрд╣рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рдХреБрдЫ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЗ рдорд┐рд▓ рд░рд╣реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдмрддрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХреИрд╕реЗ рдЦреБрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдореИрдВрдиреЗ recompose . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛
рдЙрджрд╛рд╣рд░рдг
import { StyleRules, Theme, withStyles } from "material-ui/styles";
import * as React from "react";
import { compose } from "recompose";
interface IProps {
classes?: any; // <-- add question mark
text: string;
}
const styles = (theme: Theme): StyleRules => ({
root: {
},
});
@compose(
withStyles(styles),
)
export class MyComponent extends React.Component<IProps> {
render() {
const { classes, text } = this.props;
return (
<div className={classes.root}>
{text}
</div>
);
}
}
рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ (рдФрд░ #8704) рд╕реЗ рд▓рдбрд╝ рд░рд╣рд╛ рдерд╛, рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рджрд┐рдиреЛрдВ рдореЗрдВ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рдорд┐рд▓рд╛ред рддрдм рдореИрдВрдиреЗ @pelotom рд╕реЗ рд╕рд▓рд╛рд╣ рд▓реА:
рдЖрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
StyledComponentProps
рдХреЗ рдмрдЬрд╛рдпWithStyles
рдФрд░ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП GitHub рдкрд░ рдЦреЛрдЬрд╛ред рдФрд░ рдореБрдЭреЗ рдПрдХ рдХрд╛рдордХрд╛рдЬреА рдЙрджрд╛рд╣рд░рдг ЁЯШВ рдорд┐рд▓рд╛ред рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдФрд░ рдЗрд╕рдиреЗ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ - рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ рдХрдВрдЯреЗрдирд░ рдФрд░ рдШрдЯрдХ рдПрдХ рдЦреБрд╢ рдХреБрдХреА рд╣реИ: рдпрд╣рд╛рдВ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ( рдиреЛрдЯ: рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдШрдЯрдХ рдореИрдкрд┐рдВрдЧ рдПрдХ рдЕрд▓рдЧ рдХрдВрдЯреЗрдирд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рдЪрд╛рд░ рд╣реИ рд╡реИрд╕рд╛ рд╣реАред)ред
рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмреБрд░рд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ, рддреЛ рдореИрдВ рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдФрд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВред рдЕрднреА, рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдореЗрд░реЗ рдХреЛрдб рдиреЗ рд╢рд┐рдХрд╛рдпрдд рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред
type Styles = 'foo';
const styles: StyleRulesCallback<Styles> = (theme: Theme) => ({
foo: {
position: 'relative',
}
});
interface Props {
something: string;
}
class Sidebar extends React.Component<Props & WithStyles<Styles>> {
render() {
const { classes, something } = this.props;
return (
<div className={classes.foo}>{something}</div>
);
}
}
export default withStyles(styles)<Props>(Sidebar);
рдореИрдВ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдкреНрд░рд▓реЗрдЦрди, рдЙрджрд╛рд╣рд░рдг, рдФрд░ рдкрд╛рд░рд┐рдд рдореБрджреНрджреЛрдВ рдореЗрдВ рджреЗрдЦрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдкреБрдирд░реНрд╕рдВрдпреЛрдЬрди рдХреЗ рд╕рд╛рде рднреА, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдЧреБрдг рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдЕрдкрдиреЗ рдШрдЯрдХ рдХреЛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
рдФрд░ рдЬреЛ рд╕рдВрд╕рд╛рдзрди рдореБрдЭреЗ рдорд┐рд▓реЗ рд╡реЗ рдЬреНрдпрд╛рджрд╛рддрд░ рдЯреАрдПрд╕, рдПрдордпреВрдЖрдИ рдпрд╛ рд░рд┐рдПрдХреНрдЯ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╣реИрдВред
рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдШрдЯрдХ рд╣реИ:
import React from 'react';
import AppBar from 'material-ui/AppBar';
import { withStyles, WithStyles, StyleRulesCallback } from 'material-ui/styles';
const styles: StyleRulesCallback<'positionFixed'> = () => ({
positionFixed: {
top: 'auto',
bottom: 0,
},
});
const decorate = withStyles(styles);
interface Props {
someProp: string;
};
export const BottomNav = decorate<Props>(
class extends React.Component<Props & WithStyles<'positionFixed'>, {}> {
render() {
return (
<AppBar />
);
}
}
);
export default BottomNav;
рдФрд░ рддреНрд░реБрдЯрд┐ рд╣реИ:
TS2322: Type '{}' is not assignable to type 'IntrinsicAttributes & Props & StyledComponentProps<"positionFixed"> & { children?: ReactNode; }'.
Type '{}' is not assignable to type 'Props'.
Property 'someProp' is missing in type '{}'.
рдореИрдВ рдЯреАрдПрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдлреА рд╢реБрд░реБрдЖрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкреНрд░рд▓реЗрдЦрди рдкреГрд╖реНрда рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХрд╛рдлреА рднреНрд░рдорд┐рдд рдФрд░/рдпрд╛ рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред
рдЕрдЧрд░ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рддреЛ рдзрдиреНрдпрд╡рд╛рдж ;-)
@otroboe рдХреНрдпрд╛ рдЖрдк рдЙрд╕ рдХреЛрдб рдХреЛ рдЫреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдзреНрд╡рдЬрд╛рдВрдХрд┐рдд рд╣реЛ рдЧрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рджрд┐рдЦрдирд╛ рдРрд╕рд╛ рд╣реИ?
<BottomNav />
рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ someProp
рдкреНрд░реЛрдк рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЬреЛ рдЖрдкрдХреА Props
рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЖрд╡рд╢реНрдпрдХ рд╣реИ):
<BottomNav someProp="foo" />
рдореБрдЭ рдкрд░ рд╢рд░реНрдо рдХрд░реЛ... рдУрд╣, рдореБрдЭ рдкрд░ рд╢рд░реНрдо рдХрд░реЛред
рдореИрдВ рдЯреАрдПрд╕ рдПрдХреАрдХрд░рдг рдкрд░ рдЗрддрдирд╛ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд░рд╣рд╛ рдерд╛, рдореИрдВ рдЪрд╛рд░реЛрдВ рдУрд░ рджреЗрдЦрдирд╛ рдФрд░ рдХреБрдЫ рдХрджрдо рдкреАрдЫреЗ рд╣рдЯрдирд╛ рднреВрд▓ рдЧрдпрд╛ред
рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж @pelotom : рдореБрд╕реНрдХрд╛рди:
@otroboe рд╕реНрдЯреНрд░рд┐рдВрдЧ рдбреБрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рднреА рд╣рдЯрд╛ рджреЗрдВ ...
type Styles = 'positionFixed';
рдХрд╛рд╢ рдХрд┐ рдПрдХ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣рд╛рд▓рд╛рдВрдХрд┐ ...
рд╣рд╛рдБ рдореИрдВрдиреЗ рд╡рд╣ рднреА рдХрд┐рдпрд╛, рдзрдиреНрдпрд╡рд╛рдж: +1:
рдореБрдЭреЗ рдмрд╕ рдЗрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рддрднреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдореИрдВрдиреЗ рд╕реНрдЯрд╛рдЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЙрд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдореЗрд░реА рдХрдХреНрд╖рд╛ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рд╣реЛред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдпрджрд┐ рдореИрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╢реИрд▓рд┐рдпрд╛рдБ рдЖрдпрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ, рддреЛ рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИред
рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ рдХреЛрдИ рд╕реБрд░рд╛рдЧ?
@ nishmeht7 рдХреНрдпрд╛ рдЖрдк рдПрдХ рд╕реНрд╡-рдирд┐рд╣рд┐рдд рд╕реНрдирд┐рдкреЗрдЯ рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
@pelotom рдореИрдВрдиреЗ рдЕрднреА рдПрдХ рдмрдирд╛рдиреЗ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдореЗрд░реЗ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдмрдбрд╝реЗ рдРрдк рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЕрднреА рднреА рдПрдордпреВрдЖрдИ рд╕рдВрд╕реНрдХрд░рдг 1.2.2 рдкрд░ рд╣реВрдВ, рдЬрдмрдХрд┐ рдореЗрд░рд╛ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдПрдирд╡реА рд╕рдВрд╕реНрдХрд░рдг рдирд╡реАрдирддрдо рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░ рд▓реЗрддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдЕрдкрдиреА рддреНрд░реБрдЯрд┐ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░ рдкрд╛рдКрдВрдЧрд╛ред
рдореИрдВрдиреЗ https://material-ui.com/demos/selects/ рд╕реЗ рдПрдХ рдореВрд▓ рдлреЙрд░реНрдо рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╢рд┐рдХрд╛рдпрдд рдорд┐рд▓реА рдХрд┐ theme
рдореЗрдВ root
(рдирд╡реАрдирддрдо рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ- ui), рдФрд░ form
рддрддреНрд╡ рдкрд░ рдХреЛрдИ рд╡рд░реНрдЧ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛ред рдореИрдВрдиреЗ рдКрдкрд░ рдХреА рдЪрд░реНрдЪрд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдирд┐рд░реНрдгрд╛рдпрдХ рд▓рдЧрддрд╛ рд╣реИред рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ form
рд▓рд┐рдП рдЙрддреНрдкрдиреНрди рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рдЧрд╛рдпрдм рдерд╛ред рдЕрдЧрд░ рдореИрдВрдиреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреНрд▓рд╛рд╕рдирд╛рдо рдЬреЛрдбрд╝рд╛ (рджреЗрд╡ рдЯреВрд▓реНрд╕ рдореЗрдВ console.log(theme)
рд╕рд╛рде рд╕реНрдЯрд╛рдЗрд▓ рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛, рд╕рдм рдареАрдХ рд╣реИ, рддреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрдХреНрд╖рд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХреА рдЬрд╛ рд░рд╣реА рдереАред withStyles
рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рдерд╛ рд╣рд╛рд▓рд╛рдВрдХрд┐ form
рддрддреНрд╡ред рдХрд╛рдлреА рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ред
рдЗрд╕рд▓рд┐рдП рдЬрдм рддрдХ рдЗрд╕реЗ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рддрдХ рдореИрдВ рд╡рд╛рдкрд╕ рд╢реИрд▓рд┐рдпреЛрдВ рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реВрдВ:
<form style = {{display:'flex',flexWrap:'wrap'}} autoComplete="off">
@HenrikBechmann рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реНрдЯрд╛рдЗрд▓ рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ? рдЕрддреАрдд рдореЗрдВ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдлреА рдорджрджрдЧрд╛рд░ рд░рд╣рд╛ рд╣реИред https://material-ui.com/guides/typescript/
рдзрдиреНрдпрд╡рд╛рдж @ рд▓реБрдХрдлрд░реНрд╕реНрдЯ! рдореИрдВрдиреЗ рджреЗрдЦрд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрд╣рд▓реЗ рдирд╣реАрдВ :-)) рдЙрд╕ рдбреЙрдХреНрдЯрд░ рдкрд░, рдФрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛
export default withStyles({
root: {
display: 'flex',
flexWrap: 'wrap',
},
})(BaseForm)
(рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд░рдирд╛)
... рдЬреЛ рджреЛрдиреЛрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрддреЗ рд╣реИрдВ, рдФрд░ рдЙрддреНрдкрдиреНрди рд╡рд░реНрдЧ рдХреЗ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВред
рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╡рд╣рд╛рдВ рдЕрдиреНрдп рдпреБрдХреНрддрд┐рдпрд╛рдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреАред
рдореИрдВрдиреЗ рдпрд╣ рднреА рдкреБрд╖реНрдЯрд┐ рдХреА рд╣реИ рдХрд┐ styles
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛ рдХрд╛рдо рдХрд░рддреА рд╣реИ (рдПрдХ рдЙрддреНрдкрдиреНрди className
рдХреЛ form
рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ):
import React from 'react'
import { withStyles, createStyles, Theme } from '@material-ui/core/styles'
/*
patterned after first demo https://material-ui.com/demos/selects/ for 3.03
use Typsecript fixes from here: https://material-ui.com/guides/typescript/
*/
const styles = (theme:Theme) => createStyles({
root: {
display: 'flex',
flexWrap: 'wrap',
},
})
class BaseForm extends React.Component<any,any> {
render() {
const { classes } = this.props
return (
<form className = {classes.root} autoComplete="off">
{this.props.children}
</form>
)
}
}
export default withStyles(styles)(BaseForm)
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: @ eps1lon рдиреЗ рдмрддрд╛рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ WithStyles
рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИ!
рдореЗрд░реЗ рд▓рд┐рдП ClassKey
рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ ReturnType<T>
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдЫ рд╕рдлрд▓рддрд╛ рдорд┐рд▓реА рд╣реИ:
import * as React from 'react';
import withStyles, {
StyledComponentProps,
StyleRulesCallback,
} from '@material-ui/core/styles/withStyles';
import { Theme } from '@material-ui/core/styles/createMuiTheme';
const overrideStyles = (theme: Theme) => ({
root: {
display: 'flex',
flexDirection: 'column',
},
});
type Props = StyledComponentProps<keyof ReturnType<typeof overrideStyles>>;
class MyComponent extends React.PureComponent<Props> {
render() {
return <div className={this.props.classes.root}></div>;
}
}
export default withStyles(overrideStyles as StyleRulesCallback, {withTheme: true})(MyComponent);
keyof ReturnType<typeof styleOverrides>
рдХрд╛ рдЙрдкрдпреЛрдЧ StyledComponentProps
ClassKey
рдореЗрдВ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЛ overrideStyles
рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рд╕реЗ рдЪрд╛рдмрд┐рдпрд╛рдВ рдорд┐рд▓ рдЬрд╛рдПрдВрдЧреА рдФрд░ рдЖрдкрдХреЛ рдЙрди рдЪрд╛рдмрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд░рдЦрдиреЗ рд╕реЗ рдмрдЪрд╛рдПрдЧреА . рдЕрдЧрд░ рдореИрдВрдиреЗ withStyles
рдХреЙрд▓ рдореЗрдВ overrideStyles as StyleRulesCallback
рдирд╣реАрдВ рдбрд╛рд▓рд╛ рддреЛ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЧрдбрд╝рдмрдбрд╝реА рдореИрдВрдиреЗ рджреЗрдЦреА рд╣реИ рд╡рд╣ рд╣реИ рдЯрд╛рдЗрдк рдПрд░рд░ред рдореБрдЭреЗ 100% рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ withStyles
рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ overrideStyles
рд╣реИред
рдЙрд╕ рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, typeof styleOverrides
рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реНрдЯрд╛рдЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрддрд╛ рд╣реИред ReturnType<T>
рдЖрдкрдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реА рдорд┐рд▓реЗрдЧрд╛ред keyof
рдЖрдкрдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред
@chrislambe рдЖрдкрдХреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЧрд╛рдЗрдб рдЪреЗрдХрдЖрдЙрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдкрдХреЛ ReturnType
рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред createStyles
рдФрд░ WithStyles
рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
@ eps1lon рдУрд╣ рдЕрд░реЗ, рдмрд╣реБрдд
fwiw рдореИрдВ createStyles/withStyles рдЬреЛрдбрд╝реА рдХреЛ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рд╕рд╛рдл рдХреЛрдб рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрддрд╛ рд╣реИ, рдореЗрд░реЗ рд╕рднреА рд╕реНрдЯрд╛рдЗрд▓/рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореБрджреНрджреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдФрд░ рдпрджрд┐ рдореБрдЭреЗ рд╕реНрдерд╛рдиреАрдп рд╕рд╢рд░реНрдд рд╕реАрдПрд╕рдПрд╕ рдЪрд╛рд╣рд┐рдП рддреЛ рдореИрдВ рдХреЗрд╡рд▓ рд╕реНрдерд╛рдиреАрдп рд╢реИрд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдмрдирд╛ рджреЗрддрд╛ рд╣реВрдВ, рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрдХреНрд╖рд╛рдУрдВ рдкрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд▓реЗрддреЗ рд╣реИрдВред
рдЕрдЪреНрдЫрд╛!!
@material-ui/ [email protected] рдХреЗ рд╕рд╛рде рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЧрд╛рдЗрдб рдХреЗ рдмрд╛рдж рдореБрдЭреЗ Test does not have required attribute classes
рд╣реИ:
import React from 'react'
import { Theme, WithStyles, withStyles, createStyles } from '@material-ui/core/styles'
const styles = (theme: Theme) => createStyles({
root: {
color: theme.palette.action.active
},
})
interface Props extends WithStyles<typeof styles> {
asd: boolean
}
class TestComponent extends React.Component<Props> {
render() {
const { classes } = this.props
return (
<div className={classes.root}>
</div>
)
}
}
const Test = withStyles(styles)(TestComponent)
const a = () => <Test asd={true}/>
@ рд╣рд╛рд░реВрдирд▓рд┐рдлреНрдЯрди2
рдХреГрдкрдпрд╛ WithStyles . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХрд╛ рдкрд╛рд▓рди тАЛтАЛрдХрд░реЗрдВ
@valoricDe рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░ рд▓реА рд╣реИ?
@TrejGun рдореИрдВрдиреЗ рдЕрднреА рдЪреЗрдХ рдХрд┐рдпрд╛ рд╣реИред рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рдХреЗ рд╕рд╛рде рдФрд░ @material-ui/ core @
рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╕рдордЭрддрд╛ред
рдпрд╣рд╛рдБ рдбреЙрдХреНрд╕ рдХреЗ рдмрд╛рдж: https://material-ui.com/guides/typescript/#augmenting -your-props-using-withstyles
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореВрд▓ рдореБрджреНрджреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред рдЬрдм рдЖрдк рдХрд╣реАрдВ рднреА рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдкрдХреЛ _pass_ рдХреНрд▓рд╛рд╕ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдкреНрд░реЛрдк рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде _injected_ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
рдореИрдВ рдЗрди рдореБрджреНрджреЛрдВ рдХреЛ рдХреБрдЫ рдШрдВрдЯреЛрдВ рд╕реЗ рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдХреЛрдИ рдорджрдж рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд╣реЛрдЧреАред
рдЙрдкрд░реЛрдХреНрдд рдЗрд╕ рд╕реБрдЭрд╛рд╡ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ
@cfilipov рдПрдХ рдШрдЯрдХ рд╡рд░реНрдЧ рдХреЛ
StyledComponentProps
рдмрдЬрд╛рдпWithStyles
рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрджрд┐ рд╕рдЦреНрдд рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдореЛрдб рдореЗрдВ рдЖрдкрдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреИрд░-рд╢реВрдиреНрдп рджрд╛рд╡рд╛ рдСрдкрд░реЗрдЯрд░!
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИclasses
ред рдХреНрд▓рд╛рд╕ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВwithStyles
рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рд╕рдордЭреМрддрд╛ рд╣реИред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреНрд▓рд╛рд╕ рдбреЗрдХреЛрд░реЗрдЯрд░ рдЗрд╕ рд╕реАрдорд╛ рд╕реЗ рдЧреНрд░рд╕реНрдд
- рдХреНрд▓рд╛рд╕ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ
withStyles
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рди рдХрд░реЗрдВ- рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЖрдк рд╕рдЬрд╛рдП рдЧрдП рдШрдЯрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрддреНрд╡ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп рдПрдХ рдбрдореА
classes
рдкреНрд░реЛрдк рдкрд╛рд╕ рдХрд░реЗрдВ (рдкрд┐рдЫрд▓рд╛ рд╕рдордЭреМрддрд╛, рдЬреЛ рдпрдХреАрдирди рдЕрдзрд┐рдХ рдХрд╖реНрдЯрдкреНрд░рдж рдерд╛ )- рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐
classes
рдХреЛ рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ рдЕрд╢рдХреНрдд рдорд╛рдирд╛ рдЬрд╛рдП, рдЬрд┐рд╕рд╕реЗ рдЖрдкрдХреЛ!
рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬрдм рдЖрдк рдЗрд╕рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ ( рд╡рд░реНрддрдорд╛рди рд╕рдордЭреМрддрд╛ ) рддрдХрдореИрдВ рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрджрд┐ рдЖрдкрдХреЗ рдШрдЯрдХ рдореЗрдВ рдХреЛрдИ рд░рд╛рдЬреНрдп рдирд╣реАрдВ рд╣реИ рддреЛ рдЖрдк рдПрдХ рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХрдо рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдЧрд╛:
export default withStyles(styles)<Props>(({ classes, message }) => ( <div className={classes.main}> <div className={classes.foo}> Hello World! {message} </div> </div> ));
рдореБрдЭреЗ рдХреИрд╕реЗ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ StyledComponentProps
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕рд┐рд░реНрдл рд╕реНрдЯрд╛рдЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЪрд╛рдмрд┐рдпреЛрдВ рдХреЗ рддрд╛рд░ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВред
рд▓реЗрдХрд┐рди рдбреЙрдХреНрд╕ рд╣рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ рдЬреЛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛? рдореБрдЭреЗ рдХрд┐рд╕рдХреА рдпрд╛рдж рдЖ рд░рд╣реА рд╣реИ? рдореИрдВ https://material-ui.com/guides/typescript/#augmenting -your-props-using-withstyles рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛...
рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ?
@valoricDe , рдЖрдкрдиреЗ рдЙрд╕ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рдХреЛ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд┐рд╕рдореЗрдВ рд╡рд╣ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереА
@TrejGun рдореИрдВрдиреЗ рдЕрднреА рдЪреЗрдХ рдХрд┐рдпрд╛ рд╣реИред рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рдХреЗ рд╕рд╛рде рдФрд░ @material-ui/ core @
рдореИрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ:
```рдЖрдпрд╛рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛, {рдмрджрд▓рд╛рд╡, рдШрдЯрдХ, рдкреНрд░реЗрд╖рдг} "рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛" рд╕реЗ;
"рдкреНрд░реЛрдк-рдкреНрд░рдХрд╛рд░" рд╕реЗ рдкреНрд░реЛрдкрдЯрд╛рдЗрдк рдЖрдпрд╛рдд рдХрд░реЗрдВ;
"рд░рд┐рдПрдХреНрдЯ-рд░реЗрдбрдХреНрд╕" рд╕реЗ рдЖрдпрд╛рдд {рдХрдиреЗрдХреНрдЯ};
"@material-ui/core" рд╕реЗ {рдЧреНрд░рд┐рдб, рдлреЙрд░реНрдордХрдВрдЯреНрд░реЛрд▓ рд▓реЗрдмрд▓, рдереАрдо, createStyles, withStyles, Radio, WithStyles} рдЖрдпрд╛рдд рдХрд░реЗрдВ;
"./ рд░рд╛рд╢рд┐" рд╕реЗ рдЖрдпрд╛рдд рд░рд╛рд╢рд┐;
рдЖрдпрд╛рдд { onPastDueFormFieldChange } "../../store/actions/selectPaymentAmountActions" рд╕реЗ;
рдХрд╛рд╕реНрдЯ рд╕реНрдЯрд╛рдЗрд▓ = (рдереАрдо: рдереАрдо) =>
рдХреНрд░рд┐рдПрдЯ рд╕реНрдЯрд╛рдЗрд▓реНрд╕({
рд░рдХрдо: {
рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░реЗрдВ: "рдХреЗрдВрджреНрд░",
},
});
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдУрдирдкреНрд░реЙрдкреНрд╕ рд╡рд┐рде рд╕реНрдЯрд╛рдЗрд▓реНрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реНрдЯреЗрдЯрдкреНрд░реЙрдкреНрд╕ {
рдкрд┐рдЫрд▓реЗ рдбреНрдпреВ ?: рд╕рдВрдЦреНрдпрд╛;
pastDueOrTotalOrOther: рд╕реНрдЯреНрд░рд┐рдВрдЧ;
}
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдбрд┐рд╕реНрдкреИрдЪрдкреНрд░реЙрдкреНрд╕ {
onPastDueFormFieldChange: OnPastDueFormFieldChange;
}
рдЯрд╛рдЗрдк рдкреНрд░реЙрдкреНрд╕ = рд╕реНрдЯреЗрдЯрдкреНрд░реЙрдкреНрд╕ рдФрд░ рдбрд┐рд╕реНрдкреИрдЪрдкреНрд░реЙрдкреНрд╕ рдФрд░ рдУрдирдкреНрд░реЙрдкреНрд╕;
рдХреЙрдиреНрд╕реНрдЯ рдкрд╛рд╕реНрдЯрдбреНрдпреВрдлреЙрд░реНрдордлрд┐рд▓реНрдб = рд╕реНрдЯрд╛рдЗрд▓реНрд╕ (рд╢реИрд▓рд┐рдпреЛрдВ) рдХреЗ рд╕рд╛рде (
({classes, pastDue, pastDueOrTotalOrOther, onPastDueFormFieldChange}: рдкреНрд░реЙрдкреНрд╕) => (
рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ = {pastDueOrTotalOrOther === "рдкрд╛рд╕реНрдЯрдбреНрдпреВ"}
onChange={onPastDueFormFieldChange}
рд▓реЗрдмрд▓ = "рдкрд┐рдЫрд▓реЗ рджреЗрдп:"
рдирд┐рдпрдВрддреНрд░рдг = {
/>
),
);
const mapStateToProps = (рд░рд╛рдЬреНрдп: рд░реВрдЯрд╕реНрдЯреЗрдЯ): StateProps => ({
рдкрд╛рд╕реНрдЯрдбреНрдпреВ: рд╕реНрдЯреЗрдЯ.рдХрд╕реНрдЯрдорд░рдбреЗрдЯрд╛.рдмреИрд▓реЗрдВрд╕рдбреНрдпреВ.рдкрд╛рд╕реНрдЯрдбреНрдпреВ,
pastDueOrTotalOrOther: State.customerPaymentsForm.pastDueTotalOrOther,
});
рдирд┐рд░реНрдпрд╛рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдиреЗрдХреНрдЯ
рдореИрдкрд╕реНрдЯреЗрдЯрдЯреЙрдкрдкреНрд░реЙрдкреНрд╕,
{onPastDueFormFieldChange},
)(PastDueFormField);
When I use this component I have this error:
```import PastDueFormField
Property 'classes' is missing in type '{}' but required in type 'Readonly<PropsWithChildren<Pick<Pick<Props, "pastDue" | "pastDueOrTotalOrOther" | "onPastDueFormFieldChange"> & StyledComponentProps<"amount">, "classes" | "innerRef"> & OwnProps>>'
@yehudamakarov рдкрд╣рд▓реЗ react-redux
рдХреЗ рдмрд┐рдирд╛ рдХреЛрдб рдЖрдЬрд╝рдорд╛рдПрдВ рдФрд░ рдЬрдм рд╕рдм рдХреБрдЫ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗ рддреЛ connect
рдЬреЛрдбрд╝реЗрдВред рдЬрдм рдкреНрд░реЛрдк рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрд╡рд▓реЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИред
рдЗрди рдореБрджреНрджреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╕рдордп рдореИрдВ
missing props
рдпрд╣ рдХреНрд▓реАрдирд░ рдХреЛрдб рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдЖрджреЗрд╢ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВред рдЖрдк рд╡рд░реНрддрдорд╛рди рдореЗрдВ withStyles
рдФрд░ connect
рдмрд┐рдирд╛ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рдХрд┐рдП рдорд┐рд▓рд╛рддреЗ рд╣реИрдВред
рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж рд╕реЗрдмрд╕реНрдЯрд┐рдпрдиред
рдореИрдВрдиреЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рддрд░реНрдХ рдкрд╛рд░рд┐рдд рди рдХрд░рдХреЗ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХреАред рдореИрдВрдиреЗ <StateProps ...>
рдЦрдВрдб рдирд┐рдХрд╛рд▓рд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╕рд╛рдорд╛рдиреНрдп рддрд░реНрдХ рдореЗрд░реЗ рдУрдирдкреНрд░реЙрдкреНрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдЦрд┐рд▓рд╡рд╛рдбрд╝ рдХрд░ рд░рд╣реЗ рдереЗ рдЬреЛ рдХрд┐ рд╕реНрдЯрд╛рдЗрд▓реНрд╕ <> рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред
рдЪреВрдВрдХрд┐ рдореИрдВ рдШрдЯрдХ рдХреЛ рд╕рдм рдХреБрдЫ рдкрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╡реИрд╕реЗ рднреА рдореЗрд░реЗ рдкреНрд░реЙрдкреНрд╕ рд╕реЗ рдореБрдЭреЗ рдЬреЛ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдорд┐рд▓рддреА рд╣реИ рд╡рд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдИрдбреА рдХреЛ рдХрдиреЗрдХреНрдЯ <> рдЬреЗрдирд░рд┐рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред
рдзрдиреНрдпрд╡рд╛рдж!
рдпрджрд┐ рд╣рдо рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рд╕рд╣реА рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдПрдХ рд╡рд░реНрдЧ рдХреЛ "рд╕рдЬрд╛рдиреЗ" рдЬреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:
type NonStyleProps = { text: string }; const styles = { root: { backgroundColor: 'red' } }; const DecoratedComponent = withStyles(styles)( class extends React.Component<NonStyleProps & WithStyles<'root'>> { render() { return ( <div className={this.props.classes.root}> {this.props.text} </div> ); } } );
рдФрд░ рдереАрдо рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗрдВ (useTheme ()) рдЕрдВрджрд░ рдХреА рддрд░рд╣:
const decorate = withStyles((theme: Theme) => ({
root: {
display: "flex"
},
appBar: {
zIndex: theme.zIndex.drawer + 1,
transition: theme.transitions.create(["width", "margin"], {
easing: theme.transitions.easing.sharp,
duration: theme.transitions.duration.leavingScreen
})
}
})
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореИрдВрдиреЗ recompose . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛
рдЙрджрд╛рд╣рд░рдг