গত সপ্তাহে আমি একটি আরএক্সজেএস প্রশ্নের উত্তর দিয়েছিলাম যেখানে আমি অন্য সম্প্রদায়ের সদস্যের সাথে এই বিষয়ে আলোচনায় এসেছি: "আমি কি প্রতিটি নির্দিষ্ট পার্শ্ব প্রতিক্রিয়ার জন্য সাবস্ক্রিপশন তৈরি করতে পারি বা আমার সাধারণভাবে সাবস্ক্রিপশন হ্রাস করার চেষ্টা করা উচিত?" সম্পূর্ণ প্রতিক্রিয়াশীল অ্যাপ্লিকেশন পদ্ধতির ক্ষেত্রে কোন পৌরাণিক কাহিনীটি ব্যবহার করতে হবে বা কখন অন্য থেকে অন্যটিতে যেতে হবে তা জানতে চাই। এটি আমাকে এবং সম্ভবত অন্যদেরকে অস্বচ্ছল আলোচনা এড়াতে সহায়তা করবে।
সেটআপ তথ্য
- সমস্ত উদাহরণ টাইপস্ক্রিপ্টে রয়েছে
- প্রশ্নে আরও ভাল ফোকাসের জন্য সাবস্ক্রিপশনের জন্য লাইফসাইক্যাল / কনস্ট্রাক্টর ব্যবহার এবং কাঠামোর সাথে সম্পর্কযুক্ত না রাখার জন্য
- কল্পনা করুন: সাবস্ক্রিপশনগুলি কনস্ট্রাক্টর / লাইফলাইকেল ডিআইডিতে যুক্ত করা হয়েছে
- কল্পনা করুন: আনসাবস্ক্রাইবটি লাইফাইসাইকেল নষ্টে সম্পন্ন হয়
পার্শ্ব প্রতিক্রিয়া কী (কৌণিক নমুনা)
- ইউআই-তে আপডেট / ইনপুট (উদাঃ
value$ | async
) - একটি উপাদান আউটপুট / প্রবাহ (যেমন
@Output event = event$
) - বিভিন্ন শ্রেণিবিন্যাসের বিভিন্ন পরিষেবার মধ্যে ইন্টারেক্টন
উদাহরণস্বরূপ ইউজকেস:
- দুটি ফাংশন:
foo: () => void; bar: (arg: any) => void
- দুটি উত্স পর্যবেক্ষণযোগ্য:
http$: Observable<any>; click$: Observable<void>
foo
http$
নির্গত হওয়ার পরে বলা হয় এবং এর কোনও মূল্য প্রয়োজন হয় নাbar
click$
ইমিটের পরে বলা হয় , তবে এর বর্তমান মান প্রয়োজনhttp$
কেস: প্রতিটি নির্দিষ্ট পার্শ্ব প্রতিক্রিয়া জন্য একটি সাবস্ক্রিপশন তৈরি করুন
const foo$ = http$.pipe(
mapTo(void 0)
);
const bar$ = http$.pipe(
switchMap(httpValue => click$.pipe(
mapTo(httpValue)
)
);
foo$.subscribe(foo);
bar$.subscribe(bar);
কেস: সাধারণভাবে সাবস্ক্রিপশন হ্রাস করুন
http$.pipe(
tap(() => foo()),
switchMap(httpValue => click$.pipe(
mapTo(httpValue )
)
).subscribe(bar);
সংক্ষেপে আমার নিজস্ব মতামত
সাবস্ক্রিপশনগুলি প্রথমে আরএক্স ল্যান্ডস্কেপগুলিকে আরও জটিল করে তুলেছে এই বিষয়টি আমি বুঝতে পারি, কারণ গ্রাহকরা কীভাবে পাইপকে প্রভাবিত করবেন বা উদাহরণস্বরূপ নয় (আপনার পর্যবেক্ষণযোগ্য ভাগ করুন বা না ভাগ করুন) সে সম্পর্কে আপনাকে ভাবতে হবে। তবে আপনি যত বেশি আপনার কোডকে আলাদা করবেন (যত বেশি আপনি ফোকাস করবেন: কী হবে তখন) ভবিষ্যতে আপনার কোড বজায় রাখা (পরীক্ষা, ডিবাগ, আপডেট) করা আরও সহজ। এই বিষয়টি মাথায় রেখে আমি সর্বদা আমার কোডটিতে যে কোনও পার্শ্ব প্রতিক্রিয়াটির জন্য একটি একক পর্যবেক্ষণযোগ্য উত্স এবং একটি একক সাবস্ক্রিপশন তৈরি করি। যদি আমার দুটি বা ততোধিক পার্শ্ব প্রতিক্রিয়া পর্যবেক্ষণযোগ্য হুবহু উত্স দ্বারা ট্রিগার করা হয়, তবে আমি আমার পর্যবেক্ষণযোগ্য ভাগ করে নেব এবং প্রতিটি পার্শ্ব প্রতিক্রিয়াটির জন্য স্বতন্ত্রভাবে সাবস্ক্রাইব করব, কারণ এতে আলাদা লাইফসাইকেল থাকতে পারে।