我有一个名为SocialMealplan的类,如下所示:
const OtherBox = (props: BoxInferredProps) => (
{/* TS won't complain that `props` doesn't have a `iAmNotTyped` property which is desired... */}
<div style={{ backgroundColor: props.iAmNotTyped}}>{props.children}</div>
);
然后我有以下代码:
public class SocialMealplan : Identifiable, ObservableObject {
public var id : String {
return owner.id
}
@Published public var owner : YKUser
@Published public var mealplan : Mealplan
init(owner : YKUser, mealplan : Mealplan) {
self.owner = owner
self.mealplan = mealplan
}
}
问题是,当我运行此代码时,它将获得进餐计划,但是当它尝试分配变量时,则什么也没有发生。调用refreshMealplan并分配了变量,但是UI上没有任何更改,并且视图也没有刷新以反映新数据。
(当我重新分配所有者变量时,什么也没有发生)
答案 0 :(得分:2)
每次需要重新绘制/重新创建视图时,都会创建并初始化一个新的SocialMealPlan
对象currentMealPlan
。因此,一个对象触发了更新(通过分配给已发布的var之一),但是新的更新视图引用了其自己的currentMealPlan
新的新初始化副本。
选项1:将currentMealPlan设为@StateObject
(这样就保留并引用了一个表示状态的副本)。即@StateObject var currentMealplan = SocialMealplan(owner: YKUser.none, mealplan: Mealplan.none)
选项2:或者保留@ObservedObject,但在视图之前和视图外部创建它。但是,如果其他视图也需要引用currentMealPlan
,请在视图之前创建一个视图,并将其作为环境变量传递。即MealPlanView().environmentObject(currentMealPlan)
,然后在视图 @EnvironmentObject var currentMealPlan: SocialMealPlan