ListItem 上的头像 src 或 children
Avatar src or children on ListItem
我想为头像制作一个包装器,以便在未提供 src 时将名称的第一个字母呈现为 children。问题是当我放入 ListItem 的 leftAvatar 道具时,它不会在同一行中呈现。
import React from 'react';
import Avatar from 'material-ui/Avatar';
export default function UserAvatar(props) {
const {
size,
src,
name
} = props;
return (
<Avatar
size={size || 40}
src={src || null}
>
{src ? null : name.charAt(0)}
</Avatar>
);
}
UserAvatar.propTypes = {
name: React.PropTypes.string.isRequired,
size: React.PropTypes.number,
src: React.PropTypes.string
};
当我想渲染它时:
import UserAvatar from './UserAvatar';
...
<ListItem
primaryText={post.title}
secondaryText={post.user.firstName}
leftAvatar={<UserAvatar
src={post.user.avatar}
name={post.user.firstName}
/>
}
leftAvatar={post.user.avatar}
/>
这是渲染图
预期渲染(当我不使用包装器时)
(编辑了我的答案,找到了真正的原因,不是 material-ui 中的错误)...
您需要将 "style" 属性 传递到 <Avatar />
。 ListItem
正在克隆你的 leftAvatar 元素并在其上添加一个样式,包括位置:绝对、左、顶部等。通过不传播道具(即使用 {...props}
),或复制 style
属性,你无意中遗漏了它。
export default function UserAvatar(props) {
const {
size,
src,
name,
style // <- Need to pull from props, ListItem put it here with React.cloneElement
} = props;
return (
<Avatar
style={style} // <- Pass it onto the actual material-ui Avatar
size={size || 40}
src={src || null}
>
{src ? null : name.charAt(0)}
</Avatar>
);
}
我想为头像制作一个包装器,以便在未提供 src 时将名称的第一个字母呈现为 children。问题是当我放入 ListItem 的 leftAvatar 道具时,它不会在同一行中呈现。
import React from 'react';
import Avatar from 'material-ui/Avatar';
export default function UserAvatar(props) {
const {
size,
src,
name
} = props;
return (
<Avatar
size={size || 40}
src={src || null}
>
{src ? null : name.charAt(0)}
</Avatar>
);
}
UserAvatar.propTypes = {
name: React.PropTypes.string.isRequired,
size: React.PropTypes.number,
src: React.PropTypes.string
};
当我想渲染它时:
import UserAvatar from './UserAvatar';
...
<ListItem
primaryText={post.title}
secondaryText={post.user.firstName}
leftAvatar={<UserAvatar
src={post.user.avatar}
name={post.user.firstName}
/>
}
leftAvatar={post.user.avatar}
/>
这是渲染图
预期渲染(当我不使用包装器时)
(编辑了我的答案,找到了真正的原因,不是 material-ui 中的错误)...
您需要将 "style" 属性 传递到 <Avatar />
。 ListItem
正在克隆你的 leftAvatar 元素并在其上添加一个样式,包括位置:绝对、左、顶部等。通过不传播道具(即使用 {...props}
),或复制 style
属性,你无意中遗漏了它。
export default function UserAvatar(props) {
const {
size,
src,
name,
style // <- Need to pull from props, ListItem put it here with React.cloneElement
} = props;
return (
<Avatar
style={style} // <- Pass it onto the actual material-ui Avatar
size={size || 40}
src={src || null}
>
{src ? null : name.charAt(0)}
</Avatar>
);
}