-
-
Notifications
You must be signed in to change notification settings - Fork 32.8k
Closed
Labels
discussionstatus: waiting for authorIssue with insufficient information.Issue with insufficient information.
Description
going forward is makeStyles what you're looking to do?
seems a lot easier than all the ref spam? is there any reason NOT to do this ? asking as both from a material-ui perspective and authoring components externally
I randomly picked the Avatar as an example and just put it inside one of the example dashboard apps..
attached a pic of devtools passing mui name correctly
import React from 'react';
import clsx from 'clsx';
import {withStyles, makeStyles} from '@material-ui/styles';
export const useAvatarCss = makeStyles(theme => ({
/* Styles applied to the root element. */
root: {
position: 'relative',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
flexShrink: 0,
width: 40,
height: 40,
fontFamily: theme.typography.fontFamily,
fontSize: theme.typography.pxToRem(20),
borderRadius: '50%',
overflow: 'hidden',
userSelect: 'none',
},
/* Styles applied to the root element if there are children and not `src` or `srcSet`. */
colorDefault: {
color: theme.palette.background.default,
backgroundColor:
theme.palette.type === 'light' ? theme.palette.grey[400] : theme.palette.grey[600],
},
/* Styles applied to the img element if either `src` or `srcSet` is defined. */
img: {
width: '100%',
height: '100%',
textAlign: 'center',
// Handle non-square image. The property isn't supported by IE 11.
objectFit: 'cover',
},
system: {}
}), { name: 'MuiAvatar' })
type AvatarBaseProps = {
alt?: string;
childrenClassName?: string;
imgProps?: React.HtmlHTMLAttributes<HTMLImageElement>;
sizes?: string;
src?: string;
srcSet?: string;
component?: any
} & React.HTMLProps<any>
export function Avatar(props: AvatarBaseProps) {
const {
alt,
children: childrenProp,
childrenClassName: childrenClassNameProp,
//classes,
className: classNameProp,
component: Component,
imgProps,
sizes,
src,
srcSet,
...other
} = props;
const classes = useAvatarCss()
let children = null;
const img = src || srcSet;
if (img) {
children = (
<img
alt={alt}
src={src}
srcSet={srcSet}
sizes={sizes}
className={classes.img}
{...imgProps}
/>
);
} else if (childrenClassNameProp && React.isValidElement<any>(childrenProp)) {
children = React.cloneElement<any, any>((childrenProp as any), {
className: clsx(childrenClassNameProp, childrenProp.props.className),
});
} else {
children = childrenProp;
}
return (
<Component
className={clsx(classes.root, classes.system, {
[classes.colorDefault]: !img,
}, classNameProp)}
//ref={ref}
{...other}
>
{children}
</Component>
);
}
Avatar.defaultProps = {
name: 'MuiAvatar',
component: 'div',
};
export default AvatarMetadata
Metadata
Assignees
Labels
discussionstatus: waiting for authorIssue with insufficient information.Issue with insufficient information.