前言
使用技术栈:taro、react、函数组件写法;
问题描述:
平行组件中通过父组件进行数据共享,A组件传递数据到父组件,父组件通过useState 变量的方式传递给B组件,结果发现在A组件进行数据传递时console打印出的数据(数组),有长度 且显示[{...},{...}],但点开数组时,length为0,传递到父组件的数据打印显示的也是[{...},{...}],再又由父组件通过useState的方式传递给B组件数据为[]。(A、B是属于父组件的兄弟组件);
A组件数据处理:
打印结果:
分析:
子组件A传递给父组件的数据打印出来与子组件A表示,数据是正常传递了的
在数据源头上分析:当不对数据进行处理直接在filter函数中return true时,数据能正常显示在控制台上,点开数组仍有数据;但是判断不能不要,打印出的[{..},{..}] 和长度,表示数据还是进行了过滤且打印了出来。故查询点开length为0 得知:
要想控制台打印的对象保持“原样”,先JSON.stringify一下 再打印;
控制台输出的是一个静态的快照,而当你点击数组去查看里面的详情时,看到的是实时更新后的数组。如果你还不理解 ,可以想象这样的一个场景,好比如你在看一个视频,你用截图工具截了其中某个画面,但是你没有按暂停键,过一会之后 ,你会发现刚刚截图的画面和当前播放的画面不一样了,其实是一样的道理的。
https://www.zhihu.com/question/454421006/answer/1834149977
由此在数据源上进行JSON.stringify 确实打印出来筛选后的数据,故在数据传递到父组件也是用JSON.stringify查看传递的数据也能显示数据原样;
解决方案:
根据JSON.stringify能还原数据,故在useState之前是用JSON.pares(JSON.stringfy()) 能将数据完整的传递给子组件B;
遗留问题;
1. 关于使用判断后筛选的数据打印出来的数组,查看数组无数据且length:0 的问题;
2. 使用JSON.pares(JSON.stringfy()) 为什么能将数据还为原样?
以上遗留问题欢迎大家解答,在后续中有解答后作者会持续更新~