由动画影响的样式始终优先于 setData 设置的样式。 这个设计主要是为了解决使用两种方式进行更新时产生的竞争。如果样式由动画影响,那只应使用动画来改变这些样式。
使用animation动画修改translateX之后style该属性失效程序片段:https://developers.weixin.qq.com/s/Eh46lumI76CC 复现步骤: 1、小幅度滑动图片(小于100px) 2、松开手指 3、图片自动回弹 4、回弹之后,再次拖动图片,修改translateX,图片不再跟随手指滑动
2022-09-23当分配给某个页面的显示区域尺寸发生变化的时候会触发这个页面的 onResize 。尺寸变化事件源于操作系统,在不同系统上有不同的表现是正常的。 wx.onWindowResize 是在小程序运行期间、只要显示区域尺寸有变化就会被触发的事件,不针对特定的页面。因而通过这个事件往往很难准确区分是哪个页面发生了尺寸变化,甚至在一些特殊情况下,是找不到哪个小程序页面发生了尺寸变化的(即触发 wx.onWindowResize 时不一定有 onResize 被触发)。
2022-09-14非常感谢你的反馈! bug 已经确认,当同时满足以下条件时会触发 bug : 某个 generic 最终的实现组件不是一个有效的自定义组件;在 iOS 上打开小程序,且进入较深的页面层级后返回。如需规避,建议总是在 componentGenerics 中指定有效的 default 自定义组件。 我们会尽快修复这个 bug 。
发现 iOS navigateBack 某个白屏问题和抽象组件有关?我们商详页面有个推荐商品模块,支持重复进入其他商详,在几乎所有 iOS 机型上回退几次之后必定白屏,排查发现有个地方使用了自定义组件的抽象节点,但是没有在 json 文件里引入,注释掉这个代码后就恢复正常。 为避免其他代码干扰,跑了一个最简单的 demo 发现在 iOS 上也是必现的。控制台没有任何报错,请问是什么问题呢? 操作路径: 1、在 demo 里点击 button 跳转 10 层 [图片] 2、左侧滑动返回(或者调用 wx.navigateBack),大概在返回 4~5 次就必定会出现白屏,控制台没有报错 [图片]
2022-08-18感谢反馈!列表中有所遗漏,我们补一下。 关于 behavior 内 observers 的行为:类似于生命周期,同名 observers 不会相互覆盖;被同一个组件多次引用时,只会触发一次。
官方behavior文档完善[代码]“Behavior()[代码] 构造器提供了新的定义段 [代码]definitionFilter[代码] ,用于支持自定义组件扩展。 [代码]definitionFilter[代码] 是一个函数” 这段引自 https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/extend.html https://developers.weixin.qq.com/miniprogram/dev/reference/api/Behavior.html behavior定义文档却没有明确记录 另外对于behavior中定义observers的行为也同样没有记录,希望官方完善
2022-08-08获取的时候应该写成 console.log(this.data.a.b.c.d) ,不能 console.log(this.data['a.b.c.d'])
基础库2.19.6 报错?this.data[key](key类似a.b.c.d)这种情况,获取的值为undefined ,第一次设置完值后,第二次再次获取,发现获取不到值
2022-08-02bug 已确认。我们正在紧急修复。
基础库2.24.7 createIntersectionObserver 元素监听表现异常[图片][图片] logo中显示 1和2都与红框相交了;基础库2.24.6表现正常,所以猜测是2.24.7版本的问题;
2022-07-04这里表意确实有问题,我们修正一下。
behavior的覆盖规则父 behavior > 子 behavior 应该是子>父吧。。。
2022-03-30有个基础的说明: setData 总体上说是同步的。绝大多数情况下,不需要等到 setData 回调再执行之后的逻辑。(那样反而会拖慢整体的流程,因为 setData 的回调是在渲染线程已经确认界面更新之后,有时会非常非常晚。)
可以支持异步 setData 吗?目前在 async/await 中参入回调式 setData 函数显得非常别扭,举个列子,我希望在请求完成后不论成功与否都处理一些单独的业务逻辑: try { const { data: res } = await fetch.getRes('/get', { page: 1, limit: 10 }) if (res.code === 0) { this.setData({ count: res.data.count, list: res.data.list }, () => { doSomeThings1() doSomeThings2() }) } else { wx.showToast({ title: res.data.msg, icon: 'none' }) doSomeThings1() doSomeThings2() } } catch (err) { wx.showToast({ title: '服务器开小差了', icon: 'none' }) doSomeThings1() doSomeThings2() } 会看到上面出现了大量重复代码,增加代码阅读成本,降低开发效率。当然,可以单独封装一下逻辑,例如下面这样: const doThings = () => { doSomeThings1() doSomeThings2() } try { const { data: res } = await fetch.getRes('/get', { page: 1, limit: 10 }) if (res.code === 0) { this.setData({ count: res.data.count, list: res.data.list }, doThings) } else { wx.showToast({ title: res.data.msg, icon: 'none' }) doThings() } } catch (err) { wx.showToast({ title: '服务器开小差了', icon: 'none' }) doThings() } 这时候仍然可以看到出现了三次重复的逻辑。 如果有 setDataAsync 方法,代码看上去会像下面这样更加简洁: try { const { data: res } = await fetch.getRes('/path', { page: 1, limit: 10 }) if (res.code === 0) { await this.setDataSync({ count: res.data.count, list: res.data.list }) } else { wx.showToast({ title: res.data.msg, icon: 'none' }) } } catch (err) { wx.showToast({ title: '服务器开小差了', icon: 'none' }) } doSomeThings1() doSomeThings2() 当然,也许可以自己定义一个 setDataAsync 方法,像这样: Page({ /** * 异步设置数据 * @param {Record<string, any>} data * @returns {Promise<void>} */ setDataAsync(data) { return new Promise(resolve => void this.setData(data, resolve)) } }) 可是上面这么做存在一些问题: 每个页面/组件都需要手动写上该方法,仍然会增加大量的重复代码。结合 TypeScript 时,无法和 setData 一样获得良好的代码补全(setData 方法可以获得在 data 中定义的属性并自动补全)。 以上是目前我开发时遇到的问题,目前能想到的方案是支持异步 setData,可以考虑两种方式: 让原有的 setData 返回 Promise,原有 callback 保持不变。新增 setDataAsync 异步方法。个人认为第一种方式更好些,希望开发团队考虑下。
2022-03-28感谢反馈!已确认在开发版和体验版上确有类似问题,我们会尽快修复上线。
微信小程序页面设置初始渲染缓存(initialRenderingCache)后,无法取消?我在首页的index.json配置文件里添加节点 { "initialRenderingCache": "static" } 手机初始渲染缓存可以生效,但是当我删除掉这个配置节点,手机的初始渲染缓存依然可以生效,我把小程序删除,再重新扫码进入,初始渲染缓存依然生效。 请问如何让该配置取消?
2022-03-07eventChannel 是双向的通信通道。 不过,从原则上说,与页面初始状态相关的数据应该放在 URL 中。这样有利于从小程序以外直接进入这个页面。
通过url地址携带参数和eventChannel.emit方法传参有何区别?wx.navigateTo({ url: '/pages/my/tenantpersonInfo/index?action=update', success: function(e){ res.eventChannel.emit('acceptData',{data: 'test'}) } })
2022-02-17