问题描述:
本地想写一个往数组里添加数据的逻辑,添加完数据需要重新渲染页面效果,所以通过useState辅助,获取需要添加的数据之后,直接调用set方法,
由于下一次添加数据,需要加到数组最前方,所以需要获取数组本身,但是不管set了几次,每次获取的数组还永远是初始值:
javascript
export function Demo(props: PROPS){
...
let [dataSource, setDataSource] = useState<Array<object>>([])
...
...
dataPush: (pushDataList: Array<object>) => {
let dataList = JSON.parse( JSON.stringify(pushDataList) )
console.log(dataList,dataSource)
setDataSource([
...dataList, ...dataSource
])
},
...
}
在dataPush方法内部,会获取dataSource的值,然后再dataSource之前再添上传入的参数,再触发set方法赋值回dataSource。
但是控制台打印的dataSource一直是初始值[],甚至也不是上一次set的值:

解决方案:
不太懂为什么会造成这种现象,检索了一下也没弄明白,以后能理解的时候再来回顾原理。
但解决方式就是每次先给dataSource赋值,然后再调set。
javascript
dataPush: (pushDataList: Array<object>, ifEditable?: boolean) => {
let dataList = JSON.parse( JSON.stringify(pushDataList) )
console.log(dataList,dataSource)
dataSource = [...dataList, ...dataSource]
setDataSource([...dataSource])
},