小程序 tab标签切换时出现数据状态保留的问题

太过爱你忘了你带给我的痛 2022-05-31 00:59 294阅读 0赞

SouthEast

出现的问题就是例如在女装时点击了销量最多,然后点击男装,发现男装的小编推荐既然对应的是销量最多的界面,当时就懵逼了。

后来检测才发现,我的代码在点击销量最多和价格最优的时候对设置的初始模拟数据进行了直接操作,导致其数据本身发生变化。导致切换女装/男装时初始界面(数据)不对。

主要场景是:点击女装,再点击男装,再点击女装。

后面我在onload里存储了女装和男装的初始数据,并且后面的操作数据都是用的基于存储的初始数据副本。切换女装/男装时,我对副本进行重新获取即可。

  1. var nz_data=require("../../data/nz.js");
  2. var man_data = require("../../data/man.js");
  3. // pages/reduce/reduce.js
  4. Page({
  5. /**
  6. * 页面的初始数据
  7. */
  8. data: {
  9. currentTab:1,
  10. currentTab1:1,
  11. nz_datas:[],
  12. class:1,
  13. init_datas:[],
  14. init_datas1:[]
  15. },
  16. /**
  17. * 生命周期函数--监听页面加载
  18. */
  19. onLoad: function (options) {
  20. console.log(nz_data);
  21. this.setData({
  22. nz_datas: nz_data,
  23. init_datas: nz_data
  24. })
  25. console.log(this.data.nz_datas);
  26. },
  27. toDetail: function (e) {
  28. var pid=e.currentTarget.dataset.pid;
  29. console.log("pid="+pid);
  30. wx.navigateTo({
  31. url: './detail/detail?pid='+pid
  32. })
  33. },
  34. switchNav: function(event) {
  35. var cur = event.currentTarget.dataset.current;
  36. if (this.data.currentTab == cur) { return false; }
  37. else {
  38. this.setData({
  39. currentTab: cur
  40. })
  41. }
  42. if(cur==1){
  43. this.setData({
  44. init_datas: nz_data,
  45. currentTab1: 1
  46. })
  47. var tmp_datas = this.data.init_datas;
  48. console.dir(tmp_datas);
  49. this.setData({
  50. nz_datas: tmp_datas,
  51. class:1
  52. })
  53. }
  54. if(cur==2){
  55. this.setData({
  56. init_datas1: man_data,
  57. currentTab1: 1
  58. })
  59. var tmp_datas = this.data.init_datas1;
  60. console.dir(tmp_datas);
  61. this.setData({
  62. nz_datas: tmp_datas,
  63. class:2
  64. })
  65. }
  66. },
  67. switchNav1: function (event) {
  68. var cur = event.currentTarget.dataset.curr;
  69. console.log("switchNav1_curr="+cur);
  70. console.log("class=" + this.data.class);
  71. if (this.data.currentTab1 == cur) { return false; }
  72. else {
  73. this.setData({
  74. currentTab1: cur
  75. })
  76. }
  77. if(cur==1){
  78. if(this.data.class==1){
  79. var tmp_datas = this.data.init_datas;
  80. this.setData({
  81. nz_datas: tmp_datas
  82. })
  83. }
  84. if (this.data.class == 2) {
  85. var tmp_datas = this.data.init_datas1;
  86. this.setData({
  87. nz_datas: tmp_datas
  88. })
  89. }
  90. }
  91. if(cur==2){
  92. if (this.data.class == 1){
  93. var tmp_datas = this.data.init_datas;
  94. var tmp_data = tmp_datas.nzList;
  95. }
  96. if (this.data.class == 2) {
  97. var tmp_datas = this.data.init_datas1;
  98. var tmp_data = tmp_datas.manList;
  99. }
  100. var tmp_arr=[];
  101. var tmp_arr1=[];
  102. for(var i=0;i<tmp_data.length;i++){
  103. tmp_arr.push(tmp_data[i][0].sales);
  104. tmp_arr.push(tmp_data[i][1].sales);
  105. }
  106. for(var i=0;i<tmp_arr.length-1;i++){
  107. for(var j=i+1;j<tmp_arr.length;j++){
  108. if(tmp_arr[i]<tmp_arr[j]){
  109. var tmp=tmp_arr[i];
  110. tmp_arr[i]=tmp_arr[j];
  111. tmp_arr[j]=tmp;
  112. var tmp = tmp_data[Math.floor(i/2)][i%2];
  113. tmp_data[Math.floor(i / 2)][i % 2] = tmp_data[Math.floor(j / 2)][j%2];
  114. tmp_data[Math.floor(j / 2)][j%2]=tmp;
  115. }
  116. }
  117. }
  118. if (this.data.class == 1) {
  119. var obj = {
  120. nzList: tmp_data
  121. }
  122. }
  123. if (this.data.class == 2) {
  124. var obj = {
  125. manList: tmp_data
  126. }
  127. }
  128. this.setData({
  129. nz_datas: obj
  130. })
  131. }
  132. if(cur==3){
  133. if (this.data.class == 1) {
  134. var tmp_datas = this.data.init_datas;
  135. var tmp_data = tmp_datas.nzList;
  136. }
  137. if (this.data.class == 2) {
  138. var tmp_datas = this.data.init_datas1;
  139. var tmp_data = tmp_datas.manList;
  140. }
  141. var tmp_arr = [];
  142. var tmp_arr1 = [];
  143. for (var i = 0; i < tmp_data.length; i++) {
  144. tmp_arr.push(tmp_data[i][0].price - tmp_data[i][0].coupon);
  145. tmp_arr.push(tmp_data[i][1].price - tmp_data[i][1].coupon);
  146. }
  147. for (var i = 0; i < tmp_arr.length - 1; i++) {
  148. for (var j = i + 1; j < tmp_arr.length; j++) {
  149. if (tmp_arr[i] > tmp_arr[j]) {
  150. var tmp = tmp_arr[i];
  151. tmp_arr[i] = tmp_arr[j];
  152. tmp_arr[j] = tmp;
  153. var tmp = tmp_data[Math.floor(i / 2)][i % 2];
  154. tmp_data[Math.floor(i / 2)][i % 2] = tmp_data[Math.floor(j / 2)][j % 2];
  155. tmp_data[Math.floor(j / 2)][j % 2] = tmp;
  156. }
  157. }
  158. }
  159. if(this.data.class == 1) {
  160. var obj = {
  161. nzList: tmp_data
  162. }
  163. }
  164. if (this.data.class == 2) {
  165. var obj = {
  166. manList: tmp_data
  167. }
  168. }
  169. this.setData({
  170. nz_datas: obj
  171. })
  172. }
  173. },
  174. /**
  175. * 生命周期函数--监听页面初次渲染完成
  176. */
  177. onReady: function () {
  178. },
  179. /**
  180. * 生命周期函数--监听页面显示
  181. */
  182. onShow: function () {
  183. },
  184. /**
  185. * 生命周期函数--监听页面隐藏
  186. */
  187. onHide: function () {
  188. },
  189. /**
  190. * 生命周期函数--监听页面卸载
  191. */
  192. onUnload: function () {
  193. },
  194. /**
  195. * 页面相关事件处理函数--监听用户下拉动作
  196. */
  197. onPullDownRefresh: function () {
  198. },
  199. /**
  200. * 页面上拉触底事件的处理函数
  201. */
  202. onReachBottom: function () {
  203. },
  204. /**
  205. * 用户点击右上角分享
  206. */
  207. onShareAppMessage: function () {
  208. }
  209. })

后面又做了一个雷同的界面,发现数据还是有问题

SouthEast 1

结果发现点击销量最多,再点击小编推荐,数据保持在销量最多状态,这里很明了就是更改原始数据本身的问题。只需要每次点击tab标签时对操作数据进行重置就好。

  1. switchNav1: function (event) {
  2. this.setData({
  3. init_datas: nz_data
  4. })

发表评论

表情:
评论列表 (有 0 条评论,294人围观)

还没有评论,来说两句吧...

相关阅读