# दर्शन: CrossFly बनाम डिक्लेरेटिव-रिएक्टिव

> Flutter, Compose, SwiftUI या React Native से आने वालों द्वारा साझा की जाने वाली मानसिकता का बदलाव।

Source: https://crossfly.dev/hi/docs/migrate/overview — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# दर्शन: CrossFly बनाम डिक्लेरेटिव-रिएक्टिव

मूल के अनुसार अनुवाद तालिकाओं से पहले, वह **मानसिक अनुबंध** जो सभी के लिए मान्य है।

## केवल एक बदलाव जो मायने रखता है
> **डिक्लेरेटिव-रिएक्टिव फ्रेमवर्क** (Flutter, Compose, SwiftUI, React Native) UI को
> **स्टेट के फ़ंक्शन** के रूप में वर्णित करते हैं और स्टेट बदलने पर उसे **पुनर्निर्मित** करते हैं। **CrossFly इम्पेरेटिव और ऑब्जेक्ट-
> ओरिएंटेड है:** आप **एक बार म्यूटेबल** `Component` ऑब्जेक्ट बनाते हैं (`onShow()` में), **रेफ़रेंस रखते हैं**,
> **प्रॉपर्टीज़ बदलते हैं** और `repaint()` कॉल करते हैं।

कोई पुनः निष्पादित `build()` नहीं है, कोई `setState` नहीं है, कोई `async/await` नहीं है।
Flutter/Compose के साथ समानता का बिंदु: **सब कुछ GPU के माध्यम से रेंडर होता है** (OpenGL/WebGL), बिना नेटिव विजेट्स के — दिखावट
सभी प्लेटफ़ॉर्म पर एक समान है।

## 4 स्तंभों का मैपिंग
| आपके फ्रेमवर्क में | CrossFly में |
|---|---|
| पुनः निष्पादित `build()`/`body` | `onShow()` में **एक बार** माउंट होता है; उसके बाद आप ऑब्जेक्ट्स को म्यूट करते हैं |
| `setState`/`@State`/`useState` → rebuild | फ़ील्ड बदलें + **`repaint()`** (+ `setValidLayout(false)` यदि आकार बदल गया) |
| नेस्टेड लेआउट विजेट्स | `add(valor, comp)` — **`LAY_AUTO`(0f) / `LAY_FILL`(-1f) / अंश** |
| `async`/`await`/`Future` | **`Thread`** + **`Component.onUI(...)`** (स्पष्ट थ्रेडिंग) |

## काउंटर, दो मॉडल
```java
// डिक्लेरेटिव-रिएक्टिव (छद्म): स्टेट बदलता है → UI खुद ही पुनर्निर्मित होती है।
// CrossFly: आप रेफ़रेंस रखते हैं और मैन्युअली अपडेट करते हैं।
public class Contador extends Window {
   private int n = 0;
   private Label display;
   @Override public void onShow() throws Exception {
      super.onShow();
      setLayout(new VerticalLayout());
      add(LAY_AUTO, display = new Label("0"));
      Button mais = new Button("+");
      mais.onAction(c -> { n++; display.setText(String.valueOf(n)); });  // म्यूटेट करता है + रीपेंट करता है
      add(LAY_AUTO, mais);
   }
}
```

## सार्वभौमिक जाल (हर मूल के लिए मान्य)
- उन कंपोनेंट्स के **रेफ़रेंस रखें** जिन्हें आप अपडेट करने वाले हैं (`Window` के फ़ील्ड) — पुनर्निर्माण द्वारा उन्हें
  "फिर से खोजने" का कोई तरीका नहीं है।
- **Padding/मार्जिन** विजेट्स नहीं हैं: वे कंपोनेंट के **स्टाइल** में `ingap`/`outgap` हैं।
- **कोई hot-reload नहीं** — यह संकलित Java है (डेस्कटॉप पर चक्र तेज़ है; देखें [platforms](/docs/platforms))।
- **टेक्स्ट का i18n मैनुअल है** — कोई अंतर्निहित स्ट्रिंग कैटलॉग नहीं है (देखें [i18n](/docs/best-practices/internacionalizacao))।
- **रंग `int` ARGB `0xAARRGGBB` हैं** — कोई `Color` क्लास नहीं है (`UIConstants`/`ColorUtils` का उपयोग करें)।

## अपना मूल चुनें
[Flutter](/docs/migrate/from-flutter) · [Jetpack Compose](/docs/migrate/from-jetpack-compose) ·
[SwiftUI](/docs/migrate/from-swiftui) · [React Native](/docs/migrate/from-react-native) ·
[TotalCross/SuperWaba](/docs/migrate/from-totalcross)

## यह भी देखें
- अवधारणा: [स्टेट और डेटा फ़्लो](/docs/concepts/state-and-data-flow) · [सब कुछ एक Component है](/docs/concepts/everything-is-a-component)
