javascript-如何使我的React状态立即更新?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-如何使我的React状态立即更新?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2323字,纯文字阅读大概需要4分钟。
内容图文
![javascript-如何使我的React状态立即更新?](/upload/InfoBanner/zyjiaocheng/685/ec099e4bc32146858aae995a46aec9c4.jpg)
我所做的旨在更新状态的功能无法完美运行.
我对当前状态进行了深度修改,然后将其设置为更改后的状态.我决定在副本上运行一个简单的地图,并更新数组中每个对象的属性,这使应用程序立即处于更新状态并显示更改. (以下代码未显示,我刚刚尝试过)
但这不适用于我真正想要对副本进行的修改.由于setState异步发生,因此我了解到更改不会立即发生,该如何解决呢?因为更改是在第二次触发该函数时看到的,但是我希望它在第一次运行时发生.如果需要,您可以观看有关我正在https://non.mpedersen.me/构建的实时演示.
App.js中的功能
addressSearch(address){
console.log('firing search for distance. Origin is: ' + address)
let origin = [address];
const newStores = JSON.parse(JSON.stringify(this.state.stores))
let service = new google.maps.DistanceMatrixService();
newStores.map(store => service.getDistanceMatrix({
origins: origin,
destinations: store.addressapi,
travelMode: 'DRIVING',
}, result => {
store.distance = result.rows["0"].elements["0"].distance.text.replace(/\Dkm/, '').replace(/,/,'.').replace(/\s/, '');
store.duration = result.rows["0"].elements["0"].duration.text;
}))
newStores.sort((a,b) => a.distance - b.distance);
this.setState({stores : newStores})
}
解决方法:
完成所有getDistanceMatrix并完成地图后,必须设置setState.因为该函数异步运行,所以在setState时并没有真正完成该函数.完成发生在另一个堆栈中.
承诺真的很好,因为它们有助于应对此类情况.这是一个非常好的问题,因为它显示了JS机制(事件循环)的本质.
尝试下面的代码,但知道我还没有测试/运行它,如果您有想法,它将把您带到正确的地方:
const getDistanceMatrix = (store) => {
return new Promise((resolve) => {
service.getDistanceMatrix({
origins: origin,
destinations: store.addressapi,
travelMode: 'DRIVING',
}, result => {
store.distance = result.rows["0"].elements["0"].distance.text.replace(/\Dkm/, '').replace(/,/,'.').replace(/\s/, '');
store.duration = result.rows["0"].elements["0"].duration.text;
resolve(store)
})
})
}
addressSearch(address){
console.log('firing search for distance. Origin is: ' + address)
let origin = [address];
const newStores = JSON.parse(JSON.stringify(this.state.stores))
let service = new google.maps.DistanceMatrixService();
Promise.all(newStores.map(getDistanceMatrix).then((newStores) => {
newStores.sort((a,b) => a.distance - b.distance);
this.setState({stores : newStores})
})
}
顺便说一句,如果不再安装主机组件,则在解决Promise后异步设置状态可能会导致错误.实际上,这是采用redux之类的模式的绝妙理由,它大大简化了此类工作!
内容总结
以上是互联网集市为您收集整理的javascript-如何使我的React状态立即更新?全部内容,希望文章能够帮你解决javascript-如何使我的React状态立即更新?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。