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

8

SwiftUI文档很难确定在每个渲染时实际发生了什么、它们何时发生以及是什么原因造成的(或者我不知道该去哪里找!)

我试图避免构建一个单独的类来执行逻辑并从我的视图中进行引用,但我不明白逻辑应该放在哪里,而且官方教程没有多少涉及到这一点。我试图构建一个像React一样的组件化系统,其中子组件是独立的,不必依赖于辅助类。

明确一下,我认为答案是下面的 1.


以下是我不理解的内容:

在React中,我可以说:

  const [someStateVariable, setSomeStateVariable] = useState("")
  const dependsOnStateVariable = someStateVariable ? 0 : 1;

但是在SwiftUI中,我不能做到:

@State var someStateVariable: String = ""
var dependsOnSomeStateVariable = someStateVariable ? 0 : 1

同样的道理适用于使用传递的props(初始化变量)进行逻辑处理。在react中,我可以使用这些props做一些事情。在Swift中,我无法这样做。
1.所有这些逻辑都必须放在init中吗?我猜从阅读结构文档来看,这是有道理的,我只想确保我正确理解了它。
2.分化算法和生命周期事件的文档在哪里?什么会触发渲染?什么时候运行init?在每次渲染时(即传递的属性发生更改或状态更改)还是第一次出现时(我猜测在每次渲染时,因为onAppear存在)。
3.我如何响应副作用?似乎有点复杂。是否有一个useEffect等效的东西?当特定状态或输入变量发生更改时我可以运行的代码?

1
关于3,我最接近useEffect的方法是将.onReceive设置为视图。 - Daniel Amarante
1个回答

1
你可以将dependsOnSomeStateVariable变成一个计算属性。
var dependsOnSomeStateVariable: Int {
    someStateVariable ? 0 : 1
}

据我所知,确切的 View 生命周期尚未有官方文档记录(但其中一部分已被逆向工程破解)。
对于观察对象 (@ObservedObject),你可以监听已发布的更改 (objectWillChange,通常与 DispatchQueue.main.async 结合使用)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接