ctx.settings 访问当前扩展在项目中的设置。Studio 会把写入值保存到 project.json;Player 只修改当前运行时内存。

API

方法返回值说明
get<T>(key)T | undefined读取设置,未显式设置时会回退到 schema 默认值
set<T>(key, value)void写入设置
snapshot()Record<string, unknown>获取当前扩展的设置快照
useValue<T>(key)[T | undefined, setter]React Hook;订阅单个设置
useSnapshot()Record<string, unknown>React Hook;订阅整个设置快照
subscribe<T>(key, callback)取消订阅函数在非 React 代码中订阅设置
cross.get(uiId, key)T | undefined读取另一个 UI 模块的设置
cross.set(uiId, key, value)void写入另一个 UI 模块的设置
cross.subscribe(uiId, key, callback)取消订阅函数订阅另一个 UI 模块的设置

案例:修改提示框显示时长

输入: 设置 schema 为 toastDuration 声明了默认值 3000,当前项目尚未覆盖它。
const before = ctx.settings.get<number>("toastDuration");
ctx.settings.set("toastDuration", 5000);
const after = ctx.settings.get<number>("toastDuration");

console.log({ before, after });
输出:
{
  "before": 3000,
  "after": 5000
}
Studio 中该值会写入当前项目;使用 useValue("toastDuration") 的 UI 会立即重新渲染。
UI 模块内的短 key 会自动绑定到当前 UI 作用域。只有明确需要访问同一扩展的另一个 UI 模块时,才使用 cross