image - 当 url 更改 SwiftUI 时强制重新加载图像
问题描述
新的(对于 swiftui),我想在 url 准备好后立即显示图像(刷新视图)。显然 State var 还不够。似乎 .onReceive 和发布者可能会有所帮助,但我很无助。注意:我使用 KingFisher,但任何加载器的情况似乎都是一样的。情况似乎很特殊(创建视图时 url 未准备好)但这是一个更普遍的主题:例如,当请求同步并且个人资料照片需要更新时当其他用户更改它时。
编辑:经过更多测试,如果例如我们使用 dispachQueue 推迟一秒钟然后尝试更新,则视图似乎已更新。直接使用 firebase onAppear 检索值时不会更新
import SwiftUI
import Firebase
import Kingfisher
struct Test4: View {
@State private var mProfilePhotoUrl: URL = URL(string:"0")!
var body: some View {
VStack(alignment: .center,spacing : 0){
KFImage(mProfilePhotoUrl)
}.onAppear(){
setUpProfileElements()
}
}
private func setUpProfileElements(){
// FirebaseRequest -> mProfilePhotoUrl = URL(string: User.profilePhoto)
}
}
解决方案
这是 jnpdx 答案!我不知道原因,如果它离显示太近了,但是视图不会随着 firebase 请求 onAppear 更新,使用 id 会强制刷新。
struct Test4: View {
@State private var mProfilePhotoUrl: URL = URL(string:"0")!
*@State private var ID = 0*
var body: some View {
VStack(alignment: .center,spacing : 0){
KFImage(mProfilePhotoUrl)*.id(ID)*
}.onAppear(){
setUpProfileElements()
}
}
private func setUpProfileElements(){
// FirebaseRequest -> mProfilePhotoUrl = URL(string: User.profilePhoto)
// *-> self.ID += 1*
}
}
推荐阅读
- sql - 度量的 MDX 过滤
- java - 仅当访问同一对象的相同方法时才锁定线程
- sql-server - 如何将 Windows 事件日志记录到 SQL Server?
- java - 从 Apache poi java 中读取 Excel
- python-3.x - 如何在 Selenium + Python 中查找损坏的链接
- javascript - 复制 VueJS/VuetifyJS 中选项卡转换之间的 WhatsApp 滑动
- reactjs - material-ui中的隐藏组件,如何防止渲染?
- java - 试图从一个方法中返回两个值
- uvc - 通用视频类 - 如何关闭 AGC
- excel - Excel VBA 复制和粘贴不同的工作簿