File tree Expand file tree Collapse file tree 3 files changed +21
-8
lines changed Expand file tree Collapse file tree 3 files changed +21
-8
lines changed Original file line number Diff line number Diff line change @@ -42,7 +42,7 @@ export interface CellProps<RecordType extends DefaultRecordType> {
42
42
ellipsis ?: CellEllipsisType ;
43
43
align ?: AlignType ;
44
44
45
- shouldCellUpdate ?: ( record : RecordType ) => boolean ;
45
+ shouldCellUpdate ?: ( record : RecordType , prevRecord : RecordType ) => boolean ;
46
46
47
47
// Fixed
48
48
fixLeft ?: number | false ;
@@ -207,9 +207,9 @@ function Cell<RecordType extends DefaultRecordType>(
207
207
const RefCell = React . forwardRef < any , CellProps < any > > ( Cell ) ;
208
208
RefCell . displayName = 'Cell' ;
209
209
210
- const MemoCell = React . memo ( RefCell , ( _ , next : CellProps < any > ) => {
210
+ const MemoCell = React . memo ( RefCell , ( prev : CellProps < any > , next : CellProps < any > ) => {
211
211
if ( next . shouldCellUpdate ) {
212
- return ! next . shouldCellUpdate ( next . record ) ;
212
+ return ! next . shouldCellUpdate ( next . record , prev . record ) ;
213
213
}
214
214
215
215
return false ;
Original file line number Diff line number Diff line change @@ -81,7 +81,7 @@ export interface ColumnType<RecordType> extends ColumnSharedType<RecordType> {
81
81
record : RecordType ,
82
82
index : number ,
83
83
) => React . ReactNode | RenderedCell < RecordType > ;
84
- shouldCellUpdate ?: ( record : RecordType ) => boolean ;
84
+ shouldCellUpdate ?: ( record : RecordType , prevRecord : RecordType ) => boolean ;
85
85
rowSpan ?: number ;
86
86
width ?: number | string ;
87
87
onCell ?: GetComponentProps < RecordType > ;
Original file line number Diff line number Diff line change @@ -965,18 +965,24 @@ describe('Table.Basic', () => {
965
965
const record = { key : 1 } ;
966
966
let shouldUpdate = false ;
967
967
let renderTimes = 0 ;
968
+ let prev ;
969
+ let next ;
968
970
969
- const Demo = ( ) => {
971
+ const Demo = ( { records } ) => {
970
972
const [ , forceUpdate ] = React . useState ( { } ) ;
971
973
972
974
return (
973
975
< >
974
976
< Table
975
- data = { [ record ] }
977
+ data = { records }
976
978
columns = { [
977
979
{
978
980
dataIndex : 'key' ,
979
- shouldCellUpdate : ( ) => shouldUpdate ,
981
+ shouldCellUpdate : ( nextRecord , prevRecord ) => {
982
+ next = nextRecord ;
983
+ prev = prevRecord ;
984
+ return shouldUpdate ;
985
+ } ,
980
986
render ( ) {
981
987
renderTimes += 1 ;
982
988
return null ;
@@ -994,7 +1000,7 @@ describe('Table.Basic', () => {
994
1000
) ;
995
1001
} ;
996
1002
997
- const wrapper = mount ( < Demo /> ) ;
1003
+ const wrapper = mount ( < Demo records = { [ record ] } /> ) ;
998
1004
renderTimes = 0 ;
999
1005
1000
1006
wrapper . find ( 'button' ) . simulate ( 'click' ) ;
@@ -1003,5 +1009,12 @@ describe('Table.Basic', () => {
1003
1009
shouldUpdate = true ;
1004
1010
wrapper . find ( 'button' ) . simulate ( 'click' ) ;
1005
1011
expect ( renderTimes ) . toEqual ( 1 ) ;
1012
+
1013
+ // Should update match prev & next
1014
+ const newRecord = { ...record , next : true } ;
1015
+ wrapper . setProps ( { records : [ newRecord ] } ) ;
1016
+ // wrapper.update();
1017
+ expect ( prev ) . toBe ( record ) ;
1018
+ expect ( next ) . toBe ( newRecord ) ;
1006
1019
} ) ;
1007
1020
} ) ;
You can’t perform that action at this time.
0 commit comments