如何更改 ImageField 中图像的大小?
How do I change the size of an image in an ImageField?
当我使用样式更改图像宽度和高度时,只有列宽发生变化。图片大小不受影响。
有什么想法吗?
无样式
有样式
复制
代码沙盒 (https://codesandbox.io/embed/54r440jp8k)
import React from "react";
import { Datagrid, ImageField, List, TextField } from "react-admin"; // eslint-disable-line import/no-unresolved
import { withStyles } from "material-ui/styles";
const styles = {
image: {
width: "20px",
height: "20px"
}
};
export const PostList = withStyles(styles)(({ classes, ...props }) => (
<List {...props}>
<Datagrid>
<ImageField source="image.url" className={classes.image} />
<TextField source="id" />
<TextField source="title" />
</Datagrid>
</List>
));
使用
- React-admin 版本:2.8.5
- 反应版本:16.8.6
- 浏览器:Chrome版本 73.0.3683.86(正式版)(64 位)
您可能需要一个自定义组件来执行类似的操作。像这样的事情怎么样:
ListAvatar.js
import React from 'react';
import Avatar from '@material-ui/core/Avatar';
const ListAvatar = ({ record, size }) => (
<Avatar
src={`${record.url.image}?size=${size}x${size}`}
size={size}
style={{
width: size,
height: size
}}
/>
);
ListAvatar.defaultProps = {
size: 30,
};
export default ListAvatar;
PostList.js
import React from "react";
import { Datagrid, List, TextField } from "react-admin"; // eslint-disable-line import/no-unresolved
import ListAvatar from './ListAvatar.js'
import { withStyles } from "material-ui/styles";
export const PostList = ({ classes, ...props }) => (
<List {...props}>
<Datagrid>
<ListAvatar />
<TextField source="id" />
<TextField source="title" />
</Datagrid>
</List>
);
建立 Shawn K 的 post(感谢指导!)...
我相信这是一个完整的组件(我已经测试了 <List />
组件的 类 覆盖并且它有效。这也遵循 react-admin
和 material-ui
文档(和标准)。但是,我对此还是很陌生,所以请回复任何更正,我会更新它。
import React from "react";
import PropTypes from "prop-types";
import { withStyles } from "@material-ui/core/styles";
import classNames from "classnames";
import Avatar from "@material-ui/core/Avatar";
const styles = {
img: {
width: 36,
height: 36
},
root: {}
};
const ListAvatar = ({ className, record, source, classes }) => {
return (
<Avatar
src={record[source]}
className={classNames(classes.root, classes.img, className)}
/>
);
};
ListAvatar.propTypes = {
label: PropTypes.string,
record: PropTypes.object,
source: PropTypes.string.isRequired,
classes: PropTypes.object.isRequired,
className: PropTypes.string
};
export default withStyles(styles)(ListAvatar);
参考文档
当我使用样式更改图像宽度和高度时,只有列宽发生变化。图片大小不受影响。
有什么想法吗?
无样式
有样式
复制 代码沙盒 (https://codesandbox.io/embed/54r440jp8k)
import React from "react";
import { Datagrid, ImageField, List, TextField } from "react-admin"; // eslint-disable-line import/no-unresolved
import { withStyles } from "material-ui/styles";
const styles = {
image: {
width: "20px",
height: "20px"
}
};
export const PostList = withStyles(styles)(({ classes, ...props }) => (
<List {...props}>
<Datagrid>
<ImageField source="image.url" className={classes.image} />
<TextField source="id" />
<TextField source="title" />
</Datagrid>
</List>
));
使用
- React-admin 版本:2.8.5
- 反应版本:16.8.6
- 浏览器:Chrome版本 73.0.3683.86(正式版)(64 位)
您可能需要一个自定义组件来执行类似的操作。像这样的事情怎么样:
ListAvatar.js
import React from 'react';
import Avatar from '@material-ui/core/Avatar';
const ListAvatar = ({ record, size }) => (
<Avatar
src={`${record.url.image}?size=${size}x${size}`}
size={size}
style={{
width: size,
height: size
}}
/>
);
ListAvatar.defaultProps = {
size: 30,
};
export default ListAvatar;
PostList.js
import React from "react";
import { Datagrid, List, TextField } from "react-admin"; // eslint-disable-line import/no-unresolved
import ListAvatar from './ListAvatar.js'
import { withStyles } from "material-ui/styles";
export const PostList = ({ classes, ...props }) => (
<List {...props}>
<Datagrid>
<ListAvatar />
<TextField source="id" />
<TextField source="title" />
</Datagrid>
</List>
);
建立 Shawn K 的 post(感谢指导!)...
我相信这是一个完整的组件(我已经测试了 <List />
组件的 类 覆盖并且它有效。这也遵循 react-admin
和 material-ui
文档(和标准)。但是,我对此还是很陌生,所以请回复任何更正,我会更新它。
import React from "react";
import PropTypes from "prop-types";
import { withStyles } from "@material-ui/core/styles";
import classNames from "classnames";
import Avatar from "@material-ui/core/Avatar";
const styles = {
img: {
width: 36,
height: 36
},
root: {}
};
const ListAvatar = ({ className, record, source, classes }) => {
return (
<Avatar
src={record[source]}
className={classNames(classes.root, classes.img, className)}
/>
);
};
ListAvatar.propTypes = {
label: PropTypes.string,
record: PropTypes.object,
source: PropTypes.string.isRequired,
classes: PropTypes.object.isRequired,
className: PropTypes.string
};
export default withStyles(styles)(ListAvatar);