与 React 相比,SwiftUI 的逻辑在哪里?

Die*_*sel 8 reactjs swift swiftui

SwiftUI 文档很难找出每个渲染中实际发生的事情/它们发生的时间/导致它们的原因(或者我不知道在哪里看!)

我试图避免构建一个单独的类来执行逻辑并从我的观点中引用它,我只是不明白逻辑的去向,官方教程也没有太多涉及。我正在尝试构建一个像 React 这样的基于组件的系统,其中孩子是独立的并且不必依赖辅助类。

需要明确的是,我认为答案1.如下。


这是我没有得到的。

在反应中,我可以说:

  const [someStateVariable, setSomeStateVariable] = useState("")
  const dependsOnStateVariable = someStateVariable ? 0 : 1;
Run Code Online (Sandbox Code Playgroud)

但在 SwiftUI 中我不能这样做:

@State var someStateVariable: String = ""
var dependsOnSomeStateVariable = someStateVariable ? 0 : 1
Run Code Online (Sandbox Code Playgroud)

使用传入的道具(初始化变量)执行逻辑也是如此。作为反应,我可以用这些道具做事。在 Swift 中,我不能。

  1. 所有这些逻辑都必须进入init吗?我想通过阅读有意义的结构文档,我只想确保我正确理解它。

  2. 关于差异算法和生命周期事件的文档在哪里?什么触发渲染?什么时候init跑?在每次渲染(即传入的属性更改或状态更改)或第一次出现时(我猜测在每次渲染上,因为 onAppear 存在)。

  3. 我如何应对副作用?看起来有点复杂。是否有 useEffect 等价物?只有在更改某些状态或输入变量时才能运行的代码?

Jac*_*sen 1

您可以创建dependsOnSomeStateVariable一个计算属性。

var dependsOnSomeStateVariable: Int {
    someStateVariable ? 0 : 1
}
Run Code Online (Sandbox Code Playgroud)

据我所知,确切的View生命周期没有记录(但其中一些已经被逆向工程)

对于观察到的对象 ( @ObservedObject),您可以侦听已发布的更改(objectWillChange,通常与 结合使用DispatchQueue.main.async)。