আমি যখন থেকে রেডাক্স-অনুপ্রাণিত আরএক্সজেএস-কোডটি দিয়েছিলাম তখন থেকে আমি কিছুটা বাস্তববাদী পার্থক্য যুক্ত করতে চেয়েছিলাম।
আমি প্রতিটি ক্রিয়াকলাপকে সাবজেক্ট উদাহরণে ম্যাপ করেছি। প্রতিটি রাষ্ট্রীয় উপাদানগুলির একটি সাবজেক্ট থাকবে যা তারপরে একটি হ্রাসকারক ফাংশনে ম্যাপ করা হবে। সমস্ত হ্রাসকারী স্ট্রিমগুলির সাথে একত্রিত হয় merge
এবং তারপরে scan
রাজ্যটিকে আউটপুট করে। ডিফল্ট মানটি এর startWith
ঠিক আগে সেট করা থাকে scan
। আমি ব্যবহার করতামpublishReplay(1)
রাজ্যের জন্য , তবে পরে এটি অপসারণ করতে পারে।
প্রতিক্রিয়া বিশুদ্ধ রেন্ডার ফাংশনটি কেবলমাত্র সেই জায়গায় থাকবে যেখানে আপনি সমস্ত প্রযোজক / বিষয় প্রেরণ করে ইভেন্টের ডেটা তৈরি করেন।
আপনার যদি সন্তানের উপাদান থাকে তবে আপনাকে সেই রাজ্যগুলি কীভাবে আপনার মধ্যে সংযুক্ত করা যায় তা বর্ণনা করতে হবে। combineLatest
এটির জন্য একটি ভাল সূচনা পয়েন্ট হতে পারে।
বাস্তবায়নে উল্লেখযোগ্য পার্থক্য:
মিডলওয়্যার নেই, কেবলমাত্র rxjs অপারেটর। আমি মনে করি এটিই সবচেয়ে বড় শক্তি এবং দুর্বলতা। আপনি এখনও ধারণাগুলি ধার নিতে পারেন, তবে রেডেক্স এবং চক্র.জেএস এর মতো বোন সম্প্রদায়ের কাছ থেকে সহায়তা পাওয়া আমার পক্ষে কঠিন বলে এটি আর একটি কাস্টম সমাধান। এজন্য এই লেখায় আমাকে "আমরা" পরিবর্তে "আমি" লিখতে হবে।
ক্রিয়া প্রকারের জন্য কোনও স্যুইচ / কেস বা স্ট্রিং নেই। আপনার কাছে ক্রিয়াগুলি পৃথক করার আরও গতিশীল উপায় রয়েছে।
আরএক্সজেগুলি অন্য কোথাও একটি সরঞ্জাম হিসাবে ব্যবহার করা যেতে পারে এবং এটি স্টেট ম্যানেজমেন্টের অন্তর্ভুক্ত নয়।
ক্রিয়া প্রকারের (?) থেকে প্রযোজকের সংখ্যা কম। আমি এ সম্পর্কে নিশ্চিত নই, তবে পিতা বা মাতা উপাদানগুলিতে আপনার অনেক প্রতিক্রিয়া থাকতে পারে যা সন্তানের উপাদানগুলি শোনে। এর অর্থ কম জরুরী কোড এবং কম জটিলতা।
সমাধানটির মালিক আপনার। কোনও কাঠামোর দরকার নেই। ভাল এবং খারাপ। আপনি আপনার নিজের কাঠামোটি যেভাবেই লিখতে হবে।
এটি অনেক বেশি ফ্র্যাক্টাল এবং আপনি সহজেই একটি সাব-ট্রি, বা অ্যাপ্লিকেশন রাষ্ট্র গাছের একাধিক অংশের পরিবর্তনগুলিতে সাবস্ক্রাইব করতে পারেন।
- অনুমান করুন রিডেক্স-অব্র্যাবলের মতো মহাকাব্যগুলি করা কতটা সহজ? সত্যিই সহজ।
আমি আরও অনেক বড় সুবিধা নিয়ে কাজ করছি যেখানে শিশু উপাদানগুলি স্ট্রিম হিসাবে বর্ণনা করা হয়েছে। এর অর্থ হ'ল আমাদের হ্রাসকারীদের মধ্যে পিতামাতার ও শিশুদের রাষ্ট্রের তুলনা করতে হবে না, যেহেতু আমরা কেবল ("ন্যায়সঙ্গত") উপাদানগুলির কাঠামোর ভিত্তিতে রাজ্যগুলিকে পুনরাবৃত্তভাবে সংহত করতে পারি।
প্রতিক্রিয়াশীল প্রতিক্রিয়াশীল পরিস্থিতি আরও ভাল পরিচালনা না করা পর্যন্ত আমি প্রতিক্রিয়া এড়াতে এবং স্ন্যাববডম বা অন্য কিছু নিয়ে যাব। আমরা কেন আমাদের রাজ্যটিকে আবার প্রপসের মাধ্যমে ভেঙে ওপরের দিকে গড়ে তুলি? তাই আমি স্নাবডমডম দিয়ে এই ধরণের 2 সংস্করণ তৈরির চেষ্টা করব will
এখানে আরও উন্নত তবে ছোট স্নিপেট রয়েছে যেখানে state.ts ফাইলটি রাষ্ট্রের স্ট্রিম তৈরি করে। এটি আজাক্স-ফর্ম উপাদানটির রাজ্য যা বৈধতা নিয়ম এবং CSS শৈলীর সাথে ক্ষেত্রগুলির (ইনপুট) একটি বস্তু পায়। এই ফাইলে আমরা কেবলমাত্র শিশুদের সমস্ত রাজ্যকে ফর্মের সাথে একত্রিত করতে ক্ষেত্রের নামগুলি (অবজেক্ট কীগুলি) ব্যবহার করি।
export default function create({
Observable,
ajaxInputs
}) {
const fieldStreams = Object.keys(ajaxInputs)
.map(function onMap(fieldName) {
return ajaxInputs[fieldName].state.stream
.map(function onMap(stateData) {
return {stateData, fieldName}
})
})
const stateStream = Observable.combineLatest(...fieldStreams)
.map(function onMap(fieldStreamDataArray) {
return fieldStreamDataArray.reduce(function onReduce(acc, fieldStreamData) {
acc[fieldStreamData.fieldName] = fieldStreamData.stateData
return acc
}, {})
})
return {
stream: stateStream
}
}
যদিও কোডটি বিচ্ছিন্নভাবে খুব বেশি না বলে, এটি আপনাকে কীভাবে উপরের দিকে রাজ্য বানাতে পারে এবং কীভাবে আপনি সহজেই গতিশীল ইভেন্টগুলি উত্পাদন করতে পারবেন তা দেখায়। প্রদানের মূল্যটি হ'ল আপনাকে কোডের একটি ভিন্ন স্টাইল বুঝতে হবে। এবং আমি সেই মূল্য দিতে পছন্দ করি।