小程序API调用后数据没更新,该怎么解决?
我在小程序里调用云函数获取用户信息,接口返回数据没问题,但页面就是不更新。用setData写过,也试过this.setData,页面还是显示初始值。
代码结构大概是这样:
Page({
onLoad() {
wx.cloud.callFunction({
name: 'getUser',
success: res => {
console.log(res.result.data) // 这里能打印出数据
this.setData({ userInfo: res.result.data })
}
})
}
})
页面用的wxml是{{userInfo.nickName}},样式也没问题:
.user-card {
display: flex;
align-items: center;
padding: 20rpx;
border-bottom: 1px solid #eee;
}
控制台没报错,就是数据不更新,是不是云函数返回格式有问题?或者需要手动触发渲染?
在 Page 的 data 里先初始化 userInfo:
data: {
userInfo: {}
}
然后在 onLoad 里面调用云函数的地方保持不变 继续用 this.setData 更新数据
如果还是不更新 检查一下云函数返回的数据结构是不是你预期的 比如有没有嵌套字段之类的
另外 WXML 中显示的地方改成:
data: {
userInfo: {}
}
如果没定义过,直接 setData 会失效。小程序的数据更新必须保证路径完整。或者你试试这样改:
success: res => {
console.log(res.result.data)
this.setData({ 'userInfo.nickName': res.result.data.nickName })
}
如果还不行,再加个打印看看数据结构对不对:
console.log('要设置的数据:', res.result.data)
有时候云函数返回的数据字段可能和前端预期的不一致,比如多了一层包装或者字段名拼写不对。比如返回的是 { user: { nickName: 'xxx' } },那你得取 user.nickName 才对。
云函数那边也检查一下有没有加 wx.responseCompression(),极端情况下可能影响数据。总之先从数据路径和结构入手查,页面不会无缘无故不更新。