为什么我设置了setData,数据不更新?我使用调试工具看到AppData里也没更新?setData到底如何使用?
send方法中的this也正常的啊
send(e) {
let msg = {};
this.data.messageList.push(msg, { role: 'placeholder' });
updateMsgMap(this.data.messageList);
this.setData({
messageList: this.data.messageList,
title: '正在输入...'
}, () => this.scrollToBottom());
sending = true;
request({
method: 'POST',
path: `xxx`,
data: payload,
}).then(res => {
this.data.messageList.pop();
const { u1, u2 } = res;
u1.suggest = u2.content.suggestion;
let last = this.data.messageList.pop();
last = {...last, ...u1};
this.data.messageList.push(last);
if (u2.type === 'audio') {
u2.audio_play = false;
};
this.data.messageList.push(u2);
if (u2.content.isFinish) {
this.data.messageList.push({ role: "summary" });
}
updateMsgMap(this.data.messageList);
this.setData({
messageList: this.data.messageList,
title: 'title'
}, () => this.scrollToBottom())
sending = false;
}).catch(err => {
sending = false;
})
},
我试了数据写死都没用,这太奇葩了。
另外补充一下背景信息:这个页面第一次打开调用send都是正常的,当我点了左上角的结束返回调用了redirectTo到另一个页面,然后再点回来后,用小程序插件的wechatSI语音识别后的文本调用send才会出现这种情况。send后没反应,setData无效,但是用输入框手动输入文本调用send可以正常
this
的指向会随着函数的执行环境而变化。具体来说,this
指向的是函数执行时的上下文对象。为了在函数中使用全局数据,需要将this
的指向复制到一个变量中,例如that
,这样即使this
的指向发生了变化,that
仍然指向之前的对象。函数中最初位置let that = this,之后用that代替this解决指向变化问题
let t = this, msg = {}; 然后send方法里其他地方的this都改成t
用最少的代码复现吗 ,你说设置,你把数据写死呢
console.log(this.data.messageList.length)
我的setData里有另一个字段this.setData({messageList, title}), title可以生效
别人看不到你的结果啊