@State 属性如何不保存状态?

Posted

技术标签:

【中文标题】@State 属性如何不保存状态?【英文标题】:How does @State property doesn't save the state? 【发布时间】:2021-07-10 12:06:13 【问题描述】:

我是 ios 新手。我正在尝试做一些测试 UI 以了解这里的一些基本内容,我的问题是 - 我的屏幕上有两个按钮

...
  @State private var isAlertVisible: Bool = false

...

      Button("1") 
        isAlertVisible = true
      
      .alert(isPresented: $isAlertVisible, content: 
        return Alert(title: Text("Hello there!"), message: Text("This is my first pop-up"), dismissButton: .default(Text("Awesome!")))
      )
      Button("2") 
      
      .alert(isPresented: $isAlertVisible, content: 
        return Alert(title: Text("Who's There?"), message: Text("Little old lady."), dismissButton: .default(Text("Little old lady who?")))
      )
...

测试场景是:

    点击 btn 2 - 没有任何反应 单击 btn 1 - 打开弹出窗口,isAlertVisible 值现在为 ==true 再次单击 btn 2 - 打开弹出窗口,isAlertVisible 值现在是 ==true

但实际结果是点击按钮 2 被忽略,在调试中我看到 isAlertVisible 的值仍然是 false。

问题是——为什么点击isAlertVisible的btn 1状态后没有变为true?

UPD

我想提出这样的问题

... @State private var isAlertVisible: Bool = false

...

  Button("1") 
    isAlertVisible = true
  
  .alert(isPresented: $isAlertVisible, content: 
    return Alert(title: Text("Hello there!"), message: Text("This is my first pop-up"), dismissButton: .default(Text("Awesome!")))
  )

假设我有一个 btn 并且第一次点击它,所以我设置了调试(为了查看值),我希望在我第一次点击之后 isAlertVisible 是真的,但是当我第二次点击单击调试器我看到该值仍然是错误的。看起来好像是在单击后将值从true返回到默认状态为false......这可能吗?

【问题讨论】:

你需要变量。一个用于第一个警报,一个用于第二个,每个按钮触发不同的警报。按钮 2 现在有一个空操作。他们可能正在共享一个像列表行一样的容器,这就是它第二次起作用的原因。 这是你的答案吗? ***.com/a/67265716/14733292 @loremipsum 更新了我的问题 @RajaKishan 更新了我的问题 没有Minimal Reproducible Example 就无法帮助您解决问题。 【参考方案1】:

首先,您的代码不完整,例如您的 Button 2 没有操作。

其次,如果你想显示两个不同的警报,你应该使用两个不同的变量来显示它们。

第三,解释为什么在第二次按钮点击后你的值是假的。警报修饰符接受一个绑定来决定是否应该显示警报。这是一种双向绑定,这意味着它会更改代码中的状态,还会更改从系统创建的警报视图中的状态。如果您单击警报的关闭按钮,它会将变量的值更改回两个 false 以正确表示状态。

我希望这能回答你的问题。

【讨论】:

知道了,双向绑定是我错过的,对吧。

以上是关于@State 属性如何不保存状态?的主要内容,如果未能解决你的问题,请参考以下文章

ReactJS - 如何更新嵌套和“正常”状态属性?

反应状态如何工作?

如何在 Reactjs 的组件状态下使用 OOP?

如何在 React 中保存嵌套对象的状态?

如何将处于新状态的json对象中的特定数据保存到react native中

不确定如何正确更新 Redux 中的状态