React Table dataSource 更新,Table未重新渲染

例子

直接给出未更新例子
可能跟你所写的代码不一样,但是可以参考看看

const [tableData,settableData]=useState(Array)

const columns=[
...
]

let change=(value)=>{
	//*
	let tabledata=tableData
	tabledata.push(value)
	settableData(tabledata)
	...
}

...

return(
	<Table
		 columns={columns}
		 dataSource={tableData}
	/>)

原因

  打了*号的这个写法,虽然把tableDta取出,然后直接push,但其实所指向的都是一个地址,因此这只改变了这个地址指向的内存数据。
  但就是因为指向了一个地址,React认为虚拟DOM并没有改变,因此,不会重新渲染页面。这就会导致Table组件的dataSource改变了,但是Table并没有重新渲染。

解决方法

这里给出我的解决办法,我自己觉得效果还不错,如果有更多解决办法,欢迎评论,可以在后面加上

数据需要处理时


let change=(value)=>{
	let tabledata=[]
	tableData.forEach(element=>{
	   //处理步骤
	   ...
		tabledata.push(element)
	})
	//处理步骤
	 ...
	tabledata.push(value)
	settableData(tabledata)
	...
}

不需要处理时


let change=(value)=>{
	let tabledata=[...tableData]
	//处理步骤
	 ...
	tabledata.push(value)
	settableData(tabledata)
	...
}

解决原理也很简单,新建一个Array指向不同地址,再赋值,这样React就会认为需要重新渲染Table了

如果帮助到你,能点个赞吗?

你可能感兴趣的:(React,入坑学习,reactjs,ant,Table,渲染,render,原理)