Skip to main content
ExodeUI

EXODEUI DESKTOP

A little space for good ideas.

Choose your platform to get the official ExodeUI installer.

Looking for Intel Mac or other builds? Explore the web studio or check all download options.

Prefer the browser? Try for free in your browser →
教程·React8 分钟阅读·Updated 2026 年 10 月·ExodeUI 团队

从 React 状态控制 ExodeUI 状态机输入

使用 exodeui 包在 React 中播放 ExodeUI 文件的实用指南:从 React 状态设置布尔值、数字和触发器输入,以及处理事件。

直接总结和定义

核心要点

安装 exodeui 包,使用 <ExodeUICanvas> 渲染文件,并通过将 setEngine 传递给 onReady 来使用 useExodeUI 挂钩获取引擎。然后从 React 效果和处理程序调用 setInputBool、setInputNumber 或 fireTrigger 来驱动状态机,并使用 onTrigger 监听事件。你的 React 状态仍然是事实的来源;该文件拥有该动议。

模型:你的代码拥有数据,文件拥有运动

ExodeUI 文件包含层、状态、转换以及在它们之间切换的输入。您的 React 组件根据其自身的状态决定这些输入何时发生变化。这种拆分使动画代码远离组件,并让设计人员无需接触 React 即可更改运动。

React 状态将输入输入到 ExodeUICanvas 的示意图,该画布播放 .exode 文件并通过 onTrigger 将事件发送回 React
React状态驱动输入;画布播放文件并发送回事件。

设置

使用 npm install exodeui 安装 React 运行时。如果您使用 Vite,请将 exodeui/vite-plugin 中的 exodePlugin() 添加到您的 Vite 配置中,以便可以直接导入 .exode 文件;否则使用 src 属性将 URL 传递给文件。

  • ExodeUICanvas 道具:src(URL)或画板(导入的数据)、fit、alignment、autoPlay、onReady、onTrigger、onInputUpdate。
  • useExodeUI 返回 setEngine 加上 setInputBool、setInputNumber、setInputText、setInputNumberArray、setInputStringArray、fireTrigger 和 getInputValue。
  • 输入名称必须与文件中定义的名称匹配。

布尔值、数字和触发器

使用布尔值表示保持打开的状态,例如“正在加载”。使用数字表示连续值,例如从 0 到 100 的进度。使用触发器表示一次性时刻,例如 Success,它触发一次并重置。在 React 中,根据状态设置布尔值和数字,并在事件发生的处理程序中触发触发器。

事件返回React

动画还可以告诉您的代码发生了某些事情,例如按下了文件内的按钮或成功动画完成。使用 onTrigger 处理这些,它接收触发器名称,并将实际工作(例如 API 调用)保留在 React 代码中。

测试和可访问性

由于运动是由输入驱动的,因此您可以通过检查为每个状态设置了哪些输入来测试 React 侧。在 DOM 中保留真实的按钮和标签,或者使用 ExodeSEO 组件,它可以为屏幕阅读器生成视觉上隐藏的 HTML 层。如果您的文件定义了一个简化运动布尔值,则从用户的系统设置传递一个简化运动布尔值。

生产实施片段

交互组件实现
import { useEffect } from 'react';
import { ExodeUICanvas, useExodeUI } from 'exodeui';
import saveButton from './save-button.exode'; // needs exodePlugin() from 'exodeui/vite-plugin'

export function SaveButton({ saving, progress, justSaved, onSave }) {
  const { setEngine, setInputBool, setInputNumber, fireTrigger } = useExodeUI();

  // Boolean: a state that stays on while saving
  useEffect(() => { setInputBool('Loading', saving); }, [saving, setInputBool]);

  // Number: continuous progress, 0 to 100
  useEffect(() => { setInputNumber('Progress', progress); }, [progress, setInputNumber]);

  // Trigger: a one-off moment
  useEffect(() => { if (justSaved) fireTrigger('Success'); }, [justSaved, fireTrigger]);

  return (
    <div style={{ width: 240, height: 64 }}>
      <ExodeUICanvas
        artboard={saveButton}
        onReady={setEngine}
        onTrigger={(name) => { if (name === 'Pressed') onSave(); }}
      />
    </div>
  );
}

要记住的关键 Principle

  • 使用 ExodeUICanvas 进行渲染,并将 setEngine 从 useExodeUI 传递到 onReady
  • 布尔值表示持续状态,数字表示连续值,触发器表示时刻
  • 设置来自 React 效果和处理程序的输入; React 状态仍然是真相来源
  • 使用 onTrigger 处理文件中的事件
  • 将应用程序逻辑保留在 React 中,将动作保留在文件中

常见问题解答

来源

  1. exodeui (React runtime) — npm

相关指南和示例

用真实的文件试试

打开 ExodeUI 示例,查看其输入,然后将其放入您的 React 应用程序中。

打开示例
免费试用