# 数据传递的具体过程

在 MVI (Model-View-Intent) 模式中，数据的传递过程遵循单向数据流，从 **用户交互** 到 **视图更新**，整体流程可以简化为以下步骤：

1. **用户交互**（User Interaction）
   * 用户在视图 (View) 上进行操作，比如点击按钮、输入文字等。
   * 视图捕捉到用户的操作，并将其包装为 **Intent**，代表用户意图要触发的某个行为或请求。
2. **意图 (Intent) 转换为动作 (Action)**
   * `Intent` 被发送到 **Intent 处理器**（或者可以理解为意图解析器）并转换成 **Action**。
   * 这些 **Action** 是具体的动作，可以理解为直接对业务逻辑的请求，比如“获取数据”或“提交表单”等。
3. **动作 (Action) 触发状态更新**
   * **Action** 被发送到 **Model 层**（通常为某种业务逻辑处理类或数据源）。
   * Model 层根据 Action 的内容执行相应逻辑，比如从数据库获取数据、调用 API、执行某种算法等。
   * 操作完成后，Model 层生成一个新的 **State**（状态），这是当前数据的唯一来源。
4. **状态 (State) 更新视图 (View)**
   * 新的 **State** 被返回到视图层。
   * 视图根据新的 State 内容重新渲染界面，确保 UI 展示的数据和状态始终是最新的。
   * 由于 State 是不可变的（immutable），每次状态变化时都会生成新的 State 实例，因此视图可以可靠地呈现出一致的数据，减少了意外更改状态的可能性。
5. **反复单向流动**
   * 这一单向流动会持续进行：用户的每个新交互都会触发一系列 Intent → Action → State → View 的更新循环。

#### 举个具体的例子

假设我们在购物应用中有一个“添加商品到购物车”的按钮：

* 用户点击“添加到购物车”按钮，**View** 捕获到点击事件。
* **View** 将此点击事件包装为 `AddToCartIntent` 并发送给 **Intent 处理器**。
* **Intent 处理器** 解析出此为“添加商品”的操作，并将其转换成 **AddToCartAction**，传递给 **Model**。
* **Model** 更新数据后生成新的购物车状态 **CartState**，包括购物车中的商品数量和总金额等信息。
* **View** 根据新的 **CartState** 更新界面，显示最新的购物车信息。

这种模式确保了状态流动的可预测性，使得应用中的数据更新逻辑更清晰、维护更简单。
