मैं अभिकर्मक के साथ एसपीए आवेदन बनाने की कोशिश कर रहा हूँ। मैं डिफ़ॉल्ट पृष्ठ/घटक को कैसे परिभाषित कर सकता हूं? जैसा कि मैं इसे समझता हूं, मुझे वर्तमान पृष्ठ को राज्य परमाणु में सहेजना चाहिए। लेकिन अगर मैं होम पेज में राज्य बदलता हूं तो मैं इसे परिभाषित नहीं कर सकता। उदाहरण के लिए, इस कोड में home को हल नहीं किया जा सकता (पंक्ति 1):

(defonce app-state (atom {:current-page (home)}))

(defn second-page []
  [:p 2])

(defn home []
  [:div
   [:p 1]
   [:input {:type "button" :value "Click!"
            :on-click #(swap! app-state second-page)}]])

(defn hello-world []
  [:div
   [:input {:type "button" :value "Home" :on-click #(swap! app-state home)}]
   (:current-page @app-state)
   [:h3 "footer"]])

(reagent/render-component [hello-world]
                          (. js/document (getElementById "app")))
0
VsSekorin 30 जुलाई 2019, 23:46

2 जवाब

सबसे बढ़िया उत्तर

कुछ तरीके हैं जिनसे आप इस समस्या को हल कर सकते हैं। एक तरीका यह होगा कि एक नक्शा बनाया जाए जिसे 'so' जैसे पेज कहा जाता है

(def pages {:home home
            :second second-page
            ....}

और फिर राज्य परमाणु में कुंजी नाम का उपयोग करें अर्थात।

(defonce app-state (atom {:current-page :home})

चूंकि आप केवल एक कीवर्ड स्टोर कर रहे हैं, इसलिए फॉरवर्ड डिलेरेशन की कोई आवश्यकता नहीं है क्योंकि कीवर्ड स्वयं का मूल्यांकन करते हैं। फिर अपने कोड में, आप पेज मैप से कंपोनेंट को देखने के लिए :current-page के लिए मान का उपयोग करेंगे

defn hello-world []
  [:div
   [:input {:type "button" :value "Home" :on-click #(swap! app-state home)}]
   ((:current-page @app-state) pages)
   [:h3 "footer"]])

आपको सचिव जैसी चीज़ें भी इस तरह के विचार को सामान्य बनाने के एक तरीके के उदाहरण के रूप में उपयोगी लग सकती हैं .

2
Tim X 3 अगस्त 2019, 11:51

परमाणु से पहले home और second-page के लिए प्लेसहोल्डर रखने के लिए बस declare का उपयोग करें:

(declare home second-page)

(defonce app-state (atom {:current-page home}))

एक ब्राउज़र टैब को द क्लोजर चीटशीट< के लिए हमेशा खुला रखना सुनिश्चित करें। /ए>. यह भी देखें क्लोजर के var फीचर की कार्यप्रणाली पर विवरण।

1
Alan Thompson 31 जुलाई 2019, 18:51