内存泄漏问题

This commit is contained in:
jonyshi 2019-03-20 12:38:43 +08:00
parent 2fdd8a8982
commit cf4d60a8c8
9 changed files with 3607 additions and 3597 deletions

View File

@ -691,7 +691,7 @@ var Table = function (_Component) {
var expandIconAsCell = fixed !== 'right' ? props.expandIconAsCell : false; var expandIconAsCell = fixed !== 'right' ? props.expandIconAsCell : false;
var expandIconColumnIndex = fixed !== 'right' ? props.expandIconColumnIndex : -1; var expandIconColumnIndex = fixed !== 'right' ? props.expandIconColumnIndex : -1;
if (props.lazyLoad && props.lazyLoad.preHeight && indent == 0) { if (props.lazyLoad && props.lazyLoad.preHeight && indent == 0) {
rst.push(_react2["default"].createElement(_TableRow2["default"], { height: props.lazyLoad.preHeight, columns: [], className: '', store: this.store, visible: true })); rst.push(_react2["default"].createElement(_TableRow2["default"], { height: props.lazyLoad.preHeight, columns: [], className: '', key: 'table_row_first', store: this.store, visible: true }));
} }
var lazyCurrentIndex = props.lazyLoad && props.lazyLoad.startIndex ? props.lazyLoad.startIndex : 0; var lazyCurrentIndex = props.lazyLoad && props.lazyLoad.startIndex ? props.lazyLoad.startIndex : 0;
var lazyParentIndex = props.lazyLoad && props.lazyLoad.startParentIndex ? props.lazyLoad.startParentIndex : 0; var lazyParentIndex = props.lazyLoad && props.lazyLoad.startParentIndex ? props.lazyLoad.startParentIndex : 0;
@ -775,7 +775,7 @@ var Table = function (_Component) {
height: height, height: height,
isHiddenExpandIcon: isHiddenExpandIcon isHiddenExpandIcon: isHiddenExpandIcon
}, onHoverProps, { }, onHoverProps, {
key: key, key: "table_row_" + key + "_" + index,
hoverKey: key, hoverKey: key,
ref: rowRef, ref: rowRef,
store: this.store, store: this.store,
@ -801,7 +801,7 @@ var Table = function (_Component) {
} }
if (props.lazyLoad && props.lazyLoad.sufHeight && indent == 0) { if (props.lazyLoad && props.lazyLoad.sufHeight && indent == 0) {
rst.push(_react2["default"].createElement(_TableRow2["default"], { height: props.lazyLoad.sufHeight, columns: [], className: '', store: this.store, visible: true })); rst.push(_react2["default"].createElement(_TableRow2["default"], { height: props.lazyLoad.sufHeight, key: 'table_row_end', columns: [], className: '', store: this.store, visible: true }));
} }
return rst; return rst;
}; };
@ -809,7 +809,8 @@ var Table = function (_Component) {
Table.prototype.getRows = function getRows(columns, fixed) { Table.prototype.getRows = function getRows(columns, fixed) {
//统计index只有含有鼠表结构才有用因为数表结构时固定列的索引取值有问题 //统计index只有含有鼠表结构才有用因为数表结构时固定列的索引取值有问题
this.treeRowIndex = 0; this.treeRowIndex = 0;
return this.getRowsByData(this.state.data, true, 0, columns, fixed); var rs = this.getRowsByData(this.state.data, true, 0, columns, fixed);
return rs;
}; };
Table.prototype.getColGroup = function getColGroup(columns, fixed) { Table.prototype.getColGroup = function getColGroup(columns, fixed) {

View File

@ -95,43 +95,37 @@ var TableHeader = function (_Component) {
if (_this.fixedTable.cols) { if (_this.fixedTable.cols) {
_this.fixedTable.cols[_this.drag.currIndex].style.width = newWidth + "px"; _this.fixedTable.cols[_this.drag.currIndex].style.width = newWidth + "px";
} }
var oldTableWidth = parseInt(_this.table.table.style.width ? _this.table.table.style.width : _this.table.table.scrollWidth); var newTableWidth = _this.drag.tableWidth + diff + 'px';
var newTableWidth = oldTableWidth + diff;
_this.table.table.style.width = newTableWidth; //改变table的width _this.table.table.style.width = newTableWidth; //改变table的width
_this.table.innerTableBody.style.width = newTableWidth;
var showScroll = contentDomWidth - newTableWidth - scrollbarWidth; var showScroll = contentDomWidth - newTableWidth - scrollbarWidth;
var fixedLeftHeaderTable = contentTable.querySelector('.u-table-fixed-left .u-table-header');
var fixedRighHeadertTable = contentTable.querySelector('.u-table-fixed-right .u-table-header');
var contentTableHeader = contentTable.querySelector('.u-table-scroll .u-table-header');
var fixedLeftBodyTable = contentTable.querySelector('.u-table-fixed-left .u-table-body-outer');
var fixedRightBodyTable = contentTable.querySelector('.u-table-fixed-right .u-table-body-outer');
//表头滚动条处理 //表头滚动条处理
if (headerScroll) { if (headerScroll) {
if (showScroll < 0) { if (showScroll < 0) {
//找到固定列表格设置表头的marginBottom值为scrollbarWidth; //找到固定列表格设置表头的marginBottom值为scrollbarWidth;
contentTableHeader.style.overflowX = 'scroll'; _this.table.contentTableHeader.style.overflowX = 'scroll';
_this.optTableMargin(fixedLeftHeaderTable, scrollbarWidth); _this.optTableMargin(_this.table.fixedLeftHeaderTable, scrollbarWidth);
_this.optTableMargin(fixedRighHeadertTable, scrollbarWidth); _this.optTableMargin(_this.table.fixedRighHeadertTable, scrollbarWidth);
// fixedLeftHeaderTable && (fixedLeftHeaderTable.style.marginBottom = scrollbarWidth + "px"); // fixedLeftHeaderTable && (fixedLeftHeaderTable.style.marginBottom = scrollbarWidth + "px");
// fixedRighHeadertTable && (fixedRighHeadertTable.style.marginBottom = scrollbarWidth + "px"); // fixedRighHeadertTable && (fixedRighHeadertTable.style.marginBottom = scrollbarWidth + "px");
//todo inner scroll-x去掉outer marginbottom 设置成-15px】 //todo inner scroll-x去掉outer marginbottom 设置成-15px】
} else { } else {
contentTableHeader.style.overflowX = 'hidden'; _this.table.contentTableHeader.style.overflowX = 'hidden';
_this.optTableMargin(fixedLeftHeaderTable, 0); _this.optTableMargin(_this.table.fixedLeftHeaderTable, 0);
_this.optTableMargin(fixedRighHeadertTable, 0); _this.optTableMargin(_this.table.fixedRighHeadertTable, 0);
} }
} else { } else {
if (showScroll < 0) { if (showScroll < 0) {
_this.optTableMargin(fixedLeftBodyTable, '-' + scrollbarWidth); _this.optTableMargin(_this.table.fixedLeftBodyTable, '-' + scrollbarWidth);
_this.optTableMargin(fixedRightBodyTable, '-' + scrollbarWidth); _this.optTableMargin(_this.table.fixedRightBodyTable, '-' + scrollbarWidth);
_this.optTableScroll(fixedLeftBodyTable, { x: 'scroll' }); _this.optTableScroll(_this.table.fixedLeftBodyTable, { x: 'scroll' });
_this.optTableScroll(fixedRightBodyTable, { x: 'scroll' }); _this.optTableScroll(_this.table.fixedRightBodyTable, { x: 'scroll' });
} else { } else {
_this.optTableMargin(fixedLeftBodyTable, 0); _this.optTableMargin(_this.table.fixedLeftBodyTable, 0);
_this.optTableMargin(fixedRightBodyTable, 0); _this.optTableMargin(_this.table.fixedRightBodyTable, 0);
_this.optTableScroll(fixedLeftBodyTable, { x: 'auto' }); _this.optTableScroll(_this.table.fixedLeftBodyTable, { x: 'auto' });
_this.optTableScroll(fixedRightBodyTable, { x: 'auto' }); _this.optTableScroll(_this.table.fixedRightBodyTable, { x: 'auto' });
} }
} }
} }
@ -153,6 +147,7 @@ var TableHeader = function (_Component) {
_this.drag.oldLeft = event.x; _this.drag.oldLeft = event.x;
_this.drag.oldWidth = parseInt(currentObj.style.width); _this.drag.oldWidth = parseInt(currentObj.style.width);
_this.drag.minWidth = currentObj.style.minWidth != "" ? parseInt(currentObj.style.minWidth) : defaultWidth; _this.drag.minWidth = currentObj.style.minWidth != "" ? parseInt(currentObj.style.minWidth) : defaultWidth;
_this.drag.tableWidth = parseInt(_this.table.table.style.width ? _this.table.table.style.width : _this.table.table.scrollWidth);
}; };
_this.onLineMouseUp = function (event) { _this.onLineMouseUp = function (event) {
@ -420,6 +415,11 @@ var TableHeader = function (_Component) {
this.initEvent(); this.initEvent();
}; };
TableHeader.prototype.componentWillUnmount = function componentWillUnmount() {
this.removeDragAbleEvent();
this.removeDragBorderEvent();
};
// componentDidMount(){ // componentDidMount(){
// this.initTable(); // this.initTable();
// this.initEvent(); // this.initEvent();
@ -466,6 +466,8 @@ var TableHeader = function (_Component) {
TableHeader.prototype.initTable = function initTable() { TableHeader.prototype.initTable = function initTable() {
var contentTable = this.props.contentTable;
if (!this.props.dragborder && !this.props.draggable) return; if (!this.props.dragborder && !this.props.draggable) return;
// let el = ReactDOM.findDOMNode(this); // let el = ReactDOM.findDOMNode(this);
var tableDome = this._thead.parentNode; var tableDome = this._thead.parentNode;
@ -475,11 +477,18 @@ var TableHeader = function (_Component) {
table.cols = tableDome.getElementsByTagName("col"); table.cols = tableDome.getElementsByTagName("col");
table.ths = tableDome.getElementsByTagName("th"); table.ths = tableDome.getElementsByTagName("th");
} }
table.fixedLeftHeaderTable = contentTable.querySelector('.u-table-fixed-left .u-table-header');
table.fixedRighHeadertTable = contentTable.querySelector('.u-table-fixed-right .u-table-header');
table.contentTableHeader = contentTable.querySelector('.u-table-scroll .u-table-header');
table.fixedLeftBodyTable = contentTable.querySelector('.u-table-fixed-left .u-table-body-outer');
table.fixedRightBodyTable = contentTable.querySelector('.u-table-fixed-right .u-table-body-outer');
table.innerTableBody = contentTable.querySelector('.u-table-scroll .u-table-body table');
this.table = table; this.table = table;
if (!this.props.dragborder) return; if (!this.props.dragborder) return;
if (document.getElementById("u-table-drag-thead-" + this.theadKey)) { if (document.getElementById("u-table-drag-thead-" + this.theadKey)) {
//hao 固定列table
this.fixedTable = {}; this.fixedTable = {};
var _fixedParentContext = document.getElementById("u-table-drag-thead-" + this.theadKey).parentNode; var _fixedParentContext = document.getElementById("u-table-drag-thead-" + this.theadKey).parentNode;
var siblingDom = _fixedParentContext.parentNode.nextElementSibling; var siblingDom = _fixedParentContext.parentNode.nextElementSibling;

View File

@ -246,7 +246,6 @@ var TableRow = function (_Component) {
var showSum = false; var showSum = false;
var className = this.props.className; var className = this.props.className;
if (this.state.hovered) { if (this.state.hovered) {
className += ' ' + clsPrefix + '-hover'; className += ' ' + clsPrefix + '-hover';
} }
@ -273,7 +272,7 @@ var TableRow = function (_Component) {
'td', 'td',
{ {
className: clsPrefix + '-expand-icon-cell', className: clsPrefix + '-expand-icon-cell',
key: 'rc-table-expand-icon-cell' key: 'rc-table-expand-icon-cell-' + i
}, },
expandIcon expandIcon
)); ));
@ -286,7 +285,7 @@ var TableRow = function (_Component) {
indent: indent, indent: indent,
index: index, index: index,
column: columns[i], column: columns[i],
key: columns[i].key || columns[i].dataIndex || i, key: index + "_" + (columns[i].key || columns[i].dataIndex || i),
fixed: fixed, fixed: fixed,
showSum: showSum, showSum: showSum,
expandIcon: isColumnHaveExpandIcon ? expandIcon : null expandIcon: isColumnHaveExpandIcon ? expandIcon : null

View File

@ -23,8 +23,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }
// import Checkbox from 'bee-checkbox';
/** /**
* 参数: 过滤表头 * 参数: 过滤表头
@ -38,10 +36,10 @@ function multiSelect(Table, Checkbox) {
var _class, _temp, _initialiseProps; var _class, _temp, _initialiseProps;
return _temp = _class = function (_Component) { return _temp = _class = function (_Component) {
_inherits(NewMultiSelect, _Component); _inherits(MultiSelect, _Component);
function NewMultiSelect(props) { function MultiSelect(props) {
_classCallCheck(this, NewMultiSelect); _classCallCheck(this, MultiSelect);
var _this = _possibleConstructorReturn(this, _Component.call(this, props)); var _this = _possibleConstructorReturn(this, _Component.call(this, props));
@ -54,7 +52,7 @@ function multiSelect(Table, Checkbox) {
return _this; return _this;
} }
NewMultiSelect.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) { MultiSelect.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {
if (this.props.data != nextProps.data) { if (this.props.data != nextProps.data) {
var obj = this.getCheckedOrIndeter(nextProps.data); var obj = this.getCheckedOrIndeter(nextProps.data);
this.setState(_extends({}, obj, { this.setState(_extends({}, obj, {
@ -68,7 +66,7 @@ function multiSelect(Table, Checkbox) {
*/ */
NewMultiSelect.prototype.getCheckedOrIndeter = function getCheckedOrIndeter(data) { MultiSelect.prototype.getCheckedOrIndeter = function getCheckedOrIndeter(data) {
var obj = {}; var obj = {};
var checkStatus = this.setChecked(data); var checkStatus = this.setChecked(data);
if (!checkStatus) { if (!checkStatus) {
@ -93,7 +91,7 @@ function multiSelect(Table, Checkbox) {
*/ */
NewMultiSelect.prototype.setChecked = function setChecked(data) { MultiSelect.prototype.setChecked = function setChecked(data) {
if (!this.isArray(data)) return false; if (!this.isArray(data)) return false;
if (data.length == 0) return false; if (data.length == 0) return false;
var count = 0; var count = 0;
@ -119,18 +117,18 @@ function multiSelect(Table, Checkbox) {
*/ */
NewMultiSelect.prototype.isArray = function isArray(o) { MultiSelect.prototype.isArray = function isArray(o) {
return Object.prototype.toString.call(o) == '[object Array]'; return Object.prototype.toString.call(o) == '[object Array]';
}; };
NewMultiSelect.prototype.render = function render() { MultiSelect.prototype.render = function render() {
var columns = this.props.columns; var columns = this.props.columns;
var data = this.state.data; var data = this.state.data;
return _react2["default"].createElement(Table, _extends({}, this.props, { columns: this.getDefaultColumns(columns), data: data })); return _react2["default"].createElement(Table, _extends({}, this.props, { columns: this.getDefaultColumns(columns), data: data }));
}; };
return NewMultiSelect; return MultiSelect;
}(_react.Component), _class.defaultProps = { }(_react.Component), _class.defaultProps = {
prefixCls: "u-table-mult-select", prefixCls: "u-table-mult-select",
getSelectedDataFunc: function getSelectedDataFunc() {} getSelectedDataFunc: function getSelectedDataFunc() {}

View File

@ -23,8 +23,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }
// import Checkbox from 'bee-checkbox';
/** /**
* 参数: 过滤表头 * 参数: 过滤表头

File diff suppressed because one or more lines are too long

7107
dist/demo.js vendored

File diff suppressed because one or more lines are too long

2
dist/demo.js.map vendored

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
{ {
"name": "bee-table", "name": "bee-table",
"version": "2.0.6", "version": "2.0.0-alpha.2",
"description": "Table ui component for react", "description": "Table ui component for react",
"keywords": [ "keywords": [
"react", "react",