logologo
スタート
マニュアル
開発
プラグイン
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
スタート
マニュアル
開発
プラグイン
API
logologo

概要

FlowEngineとは
FlowEngineとプラグインの関係
クイックスタート
学習ロードマップ

ガイド

FlowModelの登録
FlowModelの作成
FlowModelのレンダリング
FlowModelのイベントフローと設定
FlowModelの永続化
FlowModelのライフサイクル
FlowModelのコンテキスト体系
リアクティブ機構:Observable
FlowModel vs React.Component

定義

ModelDefinition
FlowDefinition
EventDefinition
ActionDefinition
StepDefinition
Previous PageFlowModelのコンテキスト体系
Next PageFlowModel vs React.Component
TIP

このドキュメントはAIによって翻訳されました。不正確な情報については、英語版をご参照ください

#リアクティビティメカニズム:Observable

INFO

NocoBase の Observable リアクティビティメカニズムは、本質的に MobX と似ています。現在の基盤となる実装には @formily/reactive が採用されており、その構文と概念は MobX と高い互換性があります。歴史的な理由から、直接 MobX を使用していません。

NocoBase 2.0 では、Observable リアクティブオブジェクトが至るところで使われています。これは基盤となるデータフローと UI の応答性の核であり、FlowContext、FlowModel、FlowStep といった様々な場面で広く利用されています。

#Observable を選ぶ理由

NocoBase が Redux、Recoil、Zustand、Jotai といった他の状態管理ソリューションではなく Observable を選んだ主な理由は以下の通りです。

  • 究極の柔軟性:Observable は、あらゆるオブジェクト、配列、Map、Set などをリアクティブにすることができます。深いネストや動的な構造を自然にサポートしており、複雑なビジネスモデルに非常に適しています。
  • 非侵襲性:アクション、リデューサー、または追加のストアを定義することなく、元のオブジェクトを直接操作できるため、開発体験が非常に優れています。
  • 自動依存関係追跡:コンポーネントを observer でラップするだけで、コンポーネントは使用されている Observable プロパティを自動的に追跡します。データが変更されると、手動で依存関係を管理することなく、UI が自動的に更新されます。
  • React 以外のシナリオにも対応:Observable リアクティビティメカニズムは React だけでなく、他のフレームワークと組み合わせることもでき、より広範なリアクティブデータ要件を満たします。

#observer を使う理由

observer は Observable オブジェクトの変更をリッスンし、データが変動した際に React コンポーネントの更新を自動的にトリガーします。これにより、setState やその他の更新メソッドを手動で呼び出すことなく、UI をデータと同期させることができます。

#基本的な使い方

import React from 'react';
import { Input } from 'antd';
import { observer, observable } from '@nocobase/flow-engine';

const obs = observable.deep({
  value: 'aa'
});

const MyComponent = observer(() => {
  return (
    <div>
      <Input
        defaultValue={obs.value}
        onChange={(e) => {
          obs.value = e.target.value;
        }}
      />
      <div>{obs.value}</div>
    </div>
  );
});

export default MyComponent;

リアクティブな使い方の詳細については、@formily/reactive のドキュメントをご参照ください。