提交 782b8035 编写于 作者: 陈帅

Optimize performance

上级 e9799a33
...@@ -28,4 +28,23 @@ export default { ...@@ -28,4 +28,23 @@ export default {
publicPath: '/', publicPath: '/',
disableDynamicImport: true, disableDynamicImport: true,
hash: true, hash: true,
cssLoaderOptions: {
modules: true,
getLocalIdent: (context, localIdentName, localName) => {
if (context.resourcePath.includes('node_modules')) {
return localName;
}
let antdProPath = context.resourcePath.match(/src(.*)/)[1];
if (context.resourcePath.includes('components')) {
antdProPath = antdProPath.replace('components/', '');
}
const arr = antdProPath
.split('/')
.map(a => a.replace(/([A-Z])/g, '-$1'))
.map(a => a.toLowerCase());
arr.pop();
return `antd-pro${arr.join('-')}-${localName}`.replace('--', '-');
},
},
}; };
...@@ -25,27 +25,25 @@ class Bar extends Component { ...@@ -25,27 +25,25 @@ class Bar extends Component {
if (!this.node) { if (!this.node) {
return; return;
} }
requestAnimationFrame(() => { const canvasWidth = this.node.parentNode.clientWidth;
const canvasWidth = this.node.parentNode.clientWidth; const { data = [], autoLabel = true } = this.props;
const { data = [], autoLabel = true } = this.props; if (!autoLabel) {
if (!autoLabel) { return;
return; }
} const minWidth = data.length * 30;
const minWidth = data.length * 30; const { autoHideXLabels } = this.state;
const { autoHideXLabels } = this.state;
if (canvasWidth <= minWidth) { if (canvasWidth <= minWidth) {
if (!autoHideXLabels) { if (!autoHideXLabels) {
this.setState({
autoHideXLabels: true,
});
}
} else if (autoHideXLabels) {
this.setState({ this.setState({
autoHideXLabels: false, autoHideXLabels: true,
}); });
} }
}); } else if (autoHideXLabels) {
this.setState({
autoHideXLabels: false,
});
}
} }
handleRoot = n => { handleRoot = n => {
......
import React from 'react'; import React from 'react';
import { Card, Spin } from 'antd'; import { Card } from 'antd';
import classNames from 'classnames'; import classNames from 'classnames';
import styles from './index.less'; import styles from './index.less';
...@@ -19,59 +19,77 @@ const renderTotal = total => { ...@@ -19,59 +19,77 @@ const renderTotal = total => {
return totalDom; return totalDom;
}; };
const ChartCard = ({ class ChartCard extends React.PureComponent {
loading = false, state = {
contentHeight, loading: true,
title, };
avatar, componentDidMount() {
action, requestAnimationFrame(() => {
total, this.setState({
footer, loading: false,
children, });
...rest });
}) => { }
const content = ( renderConnet = () => {
<div className={styles.chartCard}> const { contentHeight, title, avatar, action, total, footer, children, loading } = this.props;
<div if (loading || this.state.loading) {
className={classNames(styles.chartTop, { return false;
[styles.chartTopMargin]: !children && !footer, }
})} return (
> <div className={styles.chartCard}>
<div className={styles.avatar}>{avatar}</div>
<div className={styles.metaWrap}>
<div className={styles.meta}>
<span className={styles.title}>{title}</span>
<span className={styles.action}>{action}</span>
</div>
{renderTotal(total)}
</div>
</div>
{children && (
<div className={styles.content} style={{ height: contentHeight || 'auto' }}>
<div className={contentHeight && styles.contentFixed}>{children}</div>
</div>
)}
{footer && (
<div <div
className={classNames(styles.footer, { className={classNames(styles.chartTop, {
[styles.footerMargin]: !children, [styles.chartTopMargin]: !children && !footer,
})} })}
> >
{footer} <div className={styles.avatar}>{avatar}</div>
<div className={styles.metaWrap}>
<div className={styles.meta}>
<span className={styles.title}>{title}</span>
<span className={styles.action}>{action}</span>
</div>
{renderTotal(total)}
</div>
</div> </div>
)} {children && (
</div> <div className={styles.content} style={{ height: contentHeight || 'auto' }}>
); <div className={contentHeight && styles.contentFixed}>{children}</div>
</div>
return ( )}
<Card bodyStyle={{ padding: '20px 24px 8px 24px' }} {...rest}> {footer && (
{ <div
<Spin spinning={loading} wrapperClassName={styles.spin}> className={classNames(styles.footer, {
{content} [styles.footerMargin]: !children,
</Spin> })}
} >
</Card> {footer}
); </div>
}; )}
</div>
);
};
render() {
const {
loading = false,
contentHeight,
title,
avatar,
action,
total,
footer,
children,
...rest
} = this.props;
return (
<Card
loading={loading || this.state.loading}
bodyStyle={{ padding: '20px 24px 8px 24px' }}
{...rest}
>
{this.renderConnet()}
</Card>
);
}
}
export default ChartCard; export default ChartCard;
...@@ -19,7 +19,13 @@ export default class Pie extends Component { ...@@ -19,7 +19,13 @@ export default class Pie extends Component {
}; };
componentDidMount() { componentDidMount() {
window.addEventListener('resize', this.resize, { passive: true }); window.addEventListener(
'resize',
() => {
requestAnimationFrame(() => this.resize());
},
{ passive: true }
);
} }
componentDidUpdate(preProps) { componentDidUpdate(preProps) {
...@@ -66,24 +72,22 @@ export default class Pie extends Component { ...@@ -66,24 +72,22 @@ export default class Pie extends Component {
@Bind() @Bind()
@Debounce(300) @Debounce(300)
resize() { resize() {
requestAnimationFrame(() => { const { hasLegend } = this.props;
const { hasLegend } = this.props; if (!hasLegend || !this.root) {
if (!hasLegend || !this.root) { window.removeEventListener('resize', this.resize);
window.removeEventListener('resize', this.resize); return;
return; }
} if (this.root.parentNode.clientWidth <= 380) {
if (this.root.parentNode.clientWidth <= 380) { if (!this.state.legendBlock) {
if (!this.state.legendBlock) {
this.setState({
legendBlock: true,
});
}
} else if (this.state.legendBlock) {
this.setState({ this.setState({
legendBlock: false, legendBlock: true,
}); });
} }
}); } else if (this.state.legendBlock) {
this.setState({
legendBlock: false,
});
}
} }
handleRoot = n => { handleRoot = n => {
......
...@@ -17,7 +17,13 @@ export default class WaterWave extends PureComponent { ...@@ -17,7 +17,13 @@ export default class WaterWave extends PureComponent {
this.renderChart(); this.renderChart();
this.resize(); this.resize();
}); });
window.addEventListener('resize', this.resize, { passive: true }); window.addEventListener(
'resize',
() => {
requestAnimationFrame(() => this.resize());
},
{ passive: true }
);
} }
componentWillUnmount() { componentWillUnmount() {
...@@ -29,15 +35,13 @@ export default class WaterWave extends PureComponent { ...@@ -29,15 +35,13 @@ export default class WaterWave extends PureComponent {
} }
resize = () => { resize = () => {
requestAnimationFrame(() => { if (this.root) {
if (this.root) { const { height } = this.props;
const { height } = this.props; const { offsetWidth } = this.root.parentNode;
const { offsetWidth } = this.root.parentNode; this.setState({
this.setState({ radio: offsetWidth < height ? offsetWidth / height : 1,
radio: offsetWidth < height ? offsetWidth / height : 1, });
}); }
}
});
}; };
renderChart() { renderChart() {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册