gpt4 book ai didi

ios - ReSwift - 在动画中间接收 Action

转载 作者:行者123 更新时间:2023-11-28 06:32:21 26 4
gpt4 key购买 nike

我正在尝试使用 ReSwift 在我的 iOS 应用程序中应用 Redux ,但我仍然有一些 Unresolved Redux 问题。

1) 如何处理在动画中间接收状态更新?例如:说发生了一些状态变化并触发了动画,然后我收到了另一个更新(由于来自互联网的一些数据同步)。如何处理这种情况?即,延迟第二次更新,直到动画完成。

2) 我应该只发送改变状态的 Action 还是只发送触发动画的 Action ?例如:一个会触发一些动画的 Action (比如滚动到 UIScrollView 中的某个位置)不一定会改变任何状态(当然,我也有滚动位置的状态,但改变那个状态并不意味着动画到新的滚动位置,它可能意味着直接移动到它)。我还在 Action 创建者中有条件地触发该动画,在分派(dispatch)另一个 Action 并更改其他一些状态后,所以我不能只在 View 组件中执行此操作。

最佳答案

ReSwift 的 State 和 Action 处理与 Redux 惊人地相似,但具有强类型。

处理周围状态的动画主要有两种类型。并很好地总结了你的两个问题。

  1. 动画一个状态。状态更改 - 如您的示例所示 - 从任何有效状态进入新状态。如果有正在进行的动画,您可以取消它们(如果可能的话,您正在做的动画),或者排队下一个动画。

    大多数时候,如果动画可以取消,就取消它们。如果是 ListView ,你没有太多选择。如果要对动画进行排队,请在动画运行时忽略任何 View 更改并更新最新状态的本地副本。然后确保任何动画触发完成 block 来比较动画前后的状态,如果状态不同,则启动另一个动画。

  2. 第二部分听起来您可以将它们视为触发动画。即登录失败,密码框抖动一秒。

    其中一些可以通过将先前的字段值与当前的值进行比较来处理,即 state.login_status.pending.failed 会触发动画开始。

    虽然您不会收到原始的 Action 流,但只会收到 state。这与 Redux 相同。我鼓励即使对于可能不会影响状态的事件也使用操作。但是您看到这些操作的唯一方法是通过中间件。创建一个被动中间件对象来过滤 Action 流,并将它们公开给 ViewModel 或 ViewController。

我知道这听起来过于简单,但并不过分。只需将 Action 流视为唯一的真实来源,将状态视为流的投影,并将 View 视为状态的投影。一开始感觉很有限,但很难出错。

注意事项:

  • 目前暗示所有 Reducer 都将在主线程上运行,但并未强制执行,由您来确保从正确的线程完成调度。

关于ios - ReSwift - 在动画中间接收 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39970123/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com