मुख्य सामग्री पर जाएँ
CrossFly 100% ओपन सोर्सGitHub पर फ़ॉलो करें
CrossFlyCrossFly
शुरू करें

यह पृष्ठ पुर्तगाली से मशीन-अनुवादित है और इसमें त्रुटियाँ हो सकती हैं। पुर्तगाली संस्करण प्रामाणिक है।

स्टेट प्रबंधन

अगर आप React/Flutter/Compose से आ रहे हैं, तो सबसे बड़े अंतर के लिए तैयार रहें: यहाँ रिएक्टिव डेटा-बाइंडिंग नहीं है। कोई useState/Observable/setState() नहीं जो खुद-ब-खुद फिर से बनाता हो। मॉडल इंपरेटिव + स्पष्ट इनवैलिडेशन है — इसका “क्यों” स्टेट और डेटा फ़्लो में है।

पैटर्न

स्टेट आपके किसी ऑब्जेक्ट (एक ViewModel/सर्विस) के साधारण फ़ील्ड्स में रहता है। जब यह बदलता है, तो आप विजेट अपडेट करते हैं और repaint() कॉल करते हैं — अगर यह किसी दूसरी थ्रेड से आया है, तो Component.onUI(...) के भीतर।

class HomeVM {
   List<Cliente> clientes = new ArrayList<>();
}

public class TelaHome extends Window {
   private final HomeVM vm = new HomeVM();
   private ListView<Cliente> lista;

   @Override public void onShow() throws Exception {
      super.onShow();
      setLayout(new VerticalLayout());
      add(LAY_FILL, lista = new ListView<>());
      carregar();
   }

   private void carregar() {
      new Thread(() -> {
         List<Cliente> dados = repositorio.buscarTudo();   // भारी काम, background thread
         Component.onUI(() -> {                             // paint thread पर वापस
            vm.clientes = dados;
            lista.setItems(dados);                          // widget अपडेट करता है
            Component.repaint();                            // नया frame मांगता है
         });
      }).start();
   }
}

क्षणिक स्टेट बनाम एप्लिकेशन स्टेट

प्रकार कहाँ रहता है नेविगेशन के बाद बचता है?
स्क्रीन-क्षणिक Window के फ़ील्ड्स नहीं — स्क्रीन छोड़ते ही गायब
एप्लिकेशन एक साझा singleton/सर्विस हाँ — स्क्रीनों के बीच बना रहता है

स्कोप के अनुसार चुनें: किसी खोज का फ़िल्टर क्षणिक है; लॉग-इन उपयोगकर्ता एप्लिकेशन-स्तर का है।

अच्छी प्रथाएँ

  • हर स्क्रीन पर एक ViewModel स्टेट और लॉजिक को केंद्रित करता है; Window सिर्फ़ UI ↔ VM को जोड़ती है।
  • स्क्रीनों के बीच साझा स्टेट → सर्विस/singleton, बिखरे हुए static फ़ील्ड नहीं।
  • बैकग्राउंड थ्रेड से विजेट छूने से पहले हमेशा onUI(...) के साथ UI पर लौटें।

आम गलतियाँ

  • यह उम्मीद करना कि मॉडल बदलने से UI खुद अपडेट हो जाएगी — नहीं होती; setX(...) + repaint() कॉल करें।
  • ऐप स्टेट को Window के फ़ील्ड्स में रखना (नेविगेट करते ही खो जाता है)।

यह भी देखें

क्या यह पृष्ठ उपयोगी था?