ソース情報
- リポジトリ
- unoplatform/studio
- ソースの最終更新活動
- 2026年6月9日 19:39
- 検出された SKILL.md の言語
- 英語
- スター
- 10
- フォーク
- 1
インストール方法
デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。
ソースファイルを確認
インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。
メニュー
デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。
インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。
SOC 職業分類に基づく
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
直接コマンドでは確認用 Prompt が省略されます。実行前にソースを確認してください。
npx skills add https://github.com/unoplatform/studio --skill uno-mvux-state-basicsコマンドは1行のまま表示されます。コピー前に横へスクロールして全体を確認してください。
ローカルで確認しますか?SkillsMP が現在取得できるファイルをダウンロードできます。
SKILL.md を表示中
| name | uno-mvux-state-basics |
| description | Create and use IState<T> for mutable reactive data in MVUX. |
| when_to_use | Use when implementing two-way data binding (e.g., TextBox, Slider, ToggleSwitch), accepting and storing user input, maintaining editable application state, programmatically updating a value from a command or service call, or understanding the difference between `IFeed<T>` (read-only) and `IState<T>` (read/write). |
| metadata | {"author":"uno-platform","version":"2.4","category":"mvux"} |
Docs lookup: call
uno_platform_docs_search(...)first, thenuno_platform_docs_fetch(sourcePath="…")using thesourcePathfield from a result (a relative.mdpath; add the result'sanchorfor a section). Never pass a URL, a.htmllink, or a hand-built path.
Search for and fetch the state documentation:
uno_platform_docs_search("MVUX State IState mutable two-way binding")
Primary documentation page:
external/uno.extensions/doc/Reference/Reactive/state.mdFetch the full reference:
uno_platform_docs_fetch(sourcePath="external/uno.extensions/doc/Reference/Reactive/state.md")
From the fetched docs, the key factory methods on the State and State<T> classes:
State<T>.Empty(this) — starts with no valueState<T>.Value(this, initialValue) — starts with a sync valueState.Async(this, asyncFunc) — initial value from async sourceState.FromFeed(this, feed) — wraps a feed as mutable stateThe state reference page covers UpdateAsync, SetAsync, and ForEach for subscribing to changes. Focus on the "Update: How to update a state" section.
The state reference page includes a "Binding the View to a State" section showing how XAML two-way binding works automatically with generated ViewModels.
If the user needs commands that interact with states:
uno_platform_docs_search("MVUX commands state update async method")
See also the uno-mvux-commands skill.
The mutation method is UpdateAsync — public static ValueTask UpdateAsync<T>(this IState<T> state, Func<T?, T?> updater, CancellationToken ct = default).
There is no Update method on IState<T> — calling state.Update(x => ...) is a compile error. The baseline model frequently emits this wrong name; the skill must keep the correct name front-and-centre.
UpdateAsync returns ValueTask — await it from inside an async method (typically a command body).
The updater must be pure — derive the new value solely from the current parameter it receives. Do not capture or read external/mutable variables, and do not perform side effects inside it. MVUX is stateless and lockless: the updater is applied against the state's current cached value, so a function that depends on anything other than current is not guaranteed to produce a stable result. The official docs model this by declaring the updater as a static local function, which the compiler prevents from capturing enclosing state:
// Correct: a pure projection of the value you were given
static int increment(int current) => current + 1;
await Counter.UpdateAsync(increment);
// Wrong: result is not derived from `current`, it captures external state
await Counter.UpdateAsync(_ => _someExternalField);
IState<T> is mutable — it supports read and write operationsState<T>.Empty(this) requires passing this as the owner for lifecycle managementawait state.UpdateAsync(current => newValue) to update programmaticallystate.ForEach(async (value, ct) => { ... }) to react to changes