मैं प्रतिक्रिया + रेडक्स सीख रहा हूं और मुझे एनिमेशन करने का उचित तरीका समझ में नहीं आता है। उदाहरण के लिए बोलें:रेडक्स/फ्लक्स (रीएक्टजेएस के साथ) और एनीमेशन
उदाहरण के लिए, मेरे पास एक सूची है और मैं क्लिक पर आइटम को हटाना चाहता हूं। अगर मेरे पास कोई एनीमेशन प्रभाव नहीं है तो यह बहुत आसान है: REMOVE_ITEM
पर क्लिक करें, क्लिक करने पर कार्रवाई, reducer स्टोर से आइटम को हटा देता है और पुनः प्रस्तुत करता है एचटीएमएल।
चलिए क्लिक पर लाइन आइटम को हटाने का एनीमेशन जोड़ें। इसलिए, जब उपयोगकर्ता किसी आइटम पर क्लिक करता है तो मैं लाइन आइटम हटाने का एक फैंसी प्रभाव चलाने के लिए चाहता हूं और ... कैसे? मैं कई मायनों में यह कैसे करना है के बारे में सोच सकते हैं:
1) पर क्लिक करने पर मैं REMOVE_ITEM
कार्रवाई प्रेषण, तो कम करने स्टोर में goingToBeDeleted
के रूप में एक आइटम चिह्नित करते हैं, तो प्रतिक्रिया .fancy-dissolve-animation
के एक वर्ग के साथ उस तत्व renders और मैं एक टाइमर चलाने दूसरी कार्रवाई REMOVE_ITEM_COMPLETED
प्रेषित करने के लिए। मुझे यह विचार पसंद नहीं है, क्योंकि यह अभी भी अस्पष्ट है कि जेएस एनिमेशन कैसे जोड़ना है (उदाहरण के लिए, TweenMax
के साथ) और जब मैं सीएसएस एनीमेशन समाप्त होता हूं तो मैं फिर से प्रस्तुत करने के लिए जेएस टाइमर चलाता हूं। अच्छा नहीं लगता है।
2) मैं ~ 30ms के अंतराल के साथ ITEM_REMOVE_PROGRESS
क्रियाएं भेजता हूं, और स्टोर में कुछ "मान" होता है जो एनीमेशन की वर्तमान स्थिति का प्रतिनिधित्व करता है। मुझे यह भी पसंद नहीं है, क्योंकि मुझे एनीमेशन के ~ 2 सेकंड के लिए ~ 120 बार स्टोर की प्रतिलिपि बनाने की आवश्यकता होगी (कहें, मुझे चिकनी 60 एफपीएस एनीमेशन चाहिए) और यह बस स्मृति की बर्बादी है।
3) एनीमेशन बनाएं और एनीमेशन खत्म होने के बाद REMOVE_ITEM
प्रेषण करें। यह सबसे उचित तरीका है जिसके बारे में मैं सोच सकता हूं, लेकिन फिर भी जब मैं कार्रवाई करता हूं तो मैं स्टोर में चीजों को बदलना चाहता हूं। उदाहरण के लिए, एनीमेशन कुछ सेकंड से अधिक समय ले सकता है और REMOVE_ITEM
बैकएंड के साथ सिंक हो सकता है - बैकएंड एपीआई कॉल करने के लिए एनीमेशन खत्म करने का कोई कारण नहीं है।
पढ़ने के लिए धन्यवाद - कोई सुझाव?
एनीमेशन जिसका कोई डेटा प्रभाव नहीं है, वह रेडक्स स्टोर के बाहर होना चाहिए। –
@MaciejSikora हाँ, पूरी तरह से यहां सहमत हैं - इस तरह मुझे लगता है कि यह होना चाहिए। लेकिन फिर भी मुझे नहीं पता कि इसे हासिल करने का अच्छा तरीका क्या है। :( – shlajin