React useState setState之后获取到的数据一直是初始值

问题描述:

本地想写一个往数组里添加数据的逻辑,添加完数据需要重新渲染页面效果,所以通过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])
                      
                },
相关推荐
lichenyang4536 分钟前
NestJS + Socket.IO 鉴权、用户房间与幂等邀请
前端·后端
paopaokaka_luck7 分钟前
基于springboot3+vue3+uniapp的剧本杀预约小程序(AI角色对话、协同过滤算法、地图Api、Echarts图形化分析)
java·前端·spring boot·学习·echarts
lichenyang4538 分钟前
React 实时通知与异步竞态处理
前端·后端
三十而立洋13 分钟前
搭建现代化 Git 提交规范:commitlint + czg + husky + lint‑staged 完整实战
前端
半个落月15 分钟前
React + Vite Todo 实践:用 Axios 与 Mock 解开前后端等待
前端
qq_3168377517 分钟前
uniapp 安卓/H5 使用 contentEditable 属性 富文本编辑器
android·javascript·uni-app
yuqifang18 分钟前
var deferred = jQuery.Deferred(); 使用示例
前端·javascript·面试
阳火锅18 分钟前
领导夸我日报越写越详细了,其实我只敲了 npm run commit
前端·javascript·人工智能
lichenyang45320 分钟前
实时团队邀请的架构与数据流
前端·后端
一鸣AI编程21 分钟前
AI UI 测试平台从 0 到 1:8 次跑通一条 19 步用例的实战复盘
前端