প্রকল্প সম্পর্কে
Reselect হল মেমোইজড "সিলেক্টর" ফাংশন তৈরির একটি লাইব্রেরি। এটি সাধারণত Redux-এর সাথে ব্যবহৃত হয়, তবে এটি যেকোনো plain JavaScript immutable ডেটার সাথেও ব্যবহার করা যেতে পারে।
README-তে বর্ণিত মূল বৈশিষ্ট্যগুলি:
- সিলেক্টররা ডেরাইভড ডেটা গণনা করতে পারে, যা Redux-কে ন্যূনতম সম্ভাব্য state সংরক্ষণ করতে দেয়।
- সিলেক্টররা কার্যকর: কোনো সিলেক্টর আবার গণনা করা হয় না যতক্ষণ না তার একটি argument পরিবর্তিত হয়।
- সিলেক্টররা কম্পোজযোগ্য: এগুলিকে অন্যান্য সিলেক্টরের input হিসেবে ব্যবহার করা যায়।
প্রকল্পটি উদ্দেশ্য, অনুপ্রেরণা এবং সাধারণ ব্যবহারের ধরন সম্পর্কে পটভূমির জন্য Redux ডকুমেন্টেশনের ডেরাইভিং ডেটা উইথ সিলেক্টর পৃষ্ঠাটি নির্দেশ করে, যার মধ্যে React-Redux-এর সাথে ব্যবহার অন্তর্ভুক্ত।
ইনস্টলেশন বিকল্প:
- Redux Toolkit: অফিসিয়াল Redux Toolkit প্যাকেজে Reselect ডিফল্টভাবে আগে থেকেই অন্তর্ভুক্ত, তাই আর কোনো ইনস্টলেশনের প্রয়োজন নেই। এটি `@reduxjs/toolkit` থেকে `createSelector` হিসাবে ইমপোর্ট করা যেতে পারে।
- স্ট্যান্ডেলোন: npm, Yarn বা pnpm-এর মাধ্যমে `reselect` প্যাকেজটি ইনস্টল করুন।
ডকুমেন্টেশন reselect.js.org-এ হোস্ট করা হয়েছে এবং এতে একটি ভূমিকা, Reselect কীভাবে কাজ করে তার ব্যাখ্যা, `createSelector`, `createSelectorCreator`, `createStructuredSelector`, ডেভেলপমেন্ট-অনলি চেক, `lruMemoize`, এবং `weakMapMemoize`-এর API রেফারেন্স, সেইসাথে একটি FAQ অন্তর্ভুক্ত রয়েছে।
মৌলিক ব্যবহার: `createSelector` এক বা একাধিক input সিলেক্টর গ্রহণ করে যা arguments থেকে মান বের করে, এবং একটি result ফাংশন যা বের করা মানগুলি গ্রহণ করে এবং একটি ডেরাইভড মান ফেরত দেয়। উৎপন্ন output সিলেক্টর তখনই পুনরায় গণনা করে যখন বের করা মানগুলি পরিবর্তিত হয়। README-তে একটি উদাহরণ রয়েছে যা দেখায় যে একটি সাধারণ সিলেক্টর প্রতিটি কলেই চলে, যখন একটি মেমোইজড সিলেক্টর পুনর্গণনা এড়িয়ে যায় এবং ইনপুট অপরিবর্তিত থাকলে বিদ্যমান result রেফারেন্স ফেরত দেয়। এই রেফারেন্স স্থিতিশীলতা React-Redux এবং React-এর মতো লাইব্রেরিগুলির জন্য গুরুত্বপূর্ণ বলে উল্লেখ করা হয়েছে, যেগুলি UI আপডেট অপ্টিমাইজ করার জন্য রেফারেন্স সমতা পরীক্ষার উপর নির্ভর করে।
README পরিভাষা সংজ্ঞায়িত করে: সিলেক্টর ফাংশন, input সিলেক্টর, output সিলেক্টর, result ফাংশন এবং ডিপেন্ডেন্সি।
ভার্সন 5.0.0-তে বর্ণিত পরিবর্তনগুলি:
- কাস্টমাইজেশন: `createSelectorCreator`-এর জন্য options অবজেক্ট, কাস্টমাইজড `memoize` এবং `argsMemoize` ফাংশন এবং তাদের options সহ; `createSelector` সরাসরি `memoize` এবং `argsMemoize` কাস্টমাইজেশন সমর্থন করে।
- মেমোইজেশন: নতুন ডিফল্ট মেমোইজেশন ফাংশন `weakMapMemoize`; ডিবাগিংয়ের জন্য output সিলেক্টর ফিল্ডে `memoize` এবং `argsMemoize` এক্সপোজ করা হয়েছে।
- TypeScript: TypeScript 4.7-এর নিচের সংস্করণগুলির জন্য সমর্থন বন্ধ করা হয়েছে; nesting output সিলেক্টরগুলির জন্য TypeScript পারফরম্যান্স উন্নত করা হয়েছে, যেখানে nesting সীমা প্রায় 8 থেকে প্রায় 30-এ বাড়ানো হয়েছে, যা গভীর টাইপ ইনস্ট্যানশন ত্রুটি হ্রাস করে।
- API: রানটাইম ত্রুটির ঝুঁকির কারণে `createStructuredSelector`-এর দ্বিতীয় overloadটি সরানো হয়েছে।
- অতিরিক্ত বৈশিষ্ট্য: output সিলেক্টর ফিল্ডে `dependencyRecomputations` এবং `resetDependencyRecomputations`; `inputStabilityCheck` ডেভেলপমেন্ট টুল যা একই arguments সহ input সিলেক্টরকে দুবার চালায় এবং ফলাফল ভিন্ন হলে সতর্ক করে; `identityFunctionCheck` ডেভেলপমেন্ট টুল যা পরীক্ষা করে যে result ফাংশন তার নিজের input ফেরত দেয় কিনা।
- ব্রেকিং পরিবর্তন: `ParametricSelector` এবং `OutputParametricSelector` টাইপগুলি সরানো হয়েছে, তাদের কার্যকারিতা `Selector` এবং `OutputSelector`-এ একীভূত করা হয়েছে।
প্রকল্পটি MIT লাইসেন্সের অধীনে। এটি মূলত NuclearJS-এর getters, re-frame-এর subscriptions এবং একটি Redux প্রস্তাব দ্বারা অনুপ্রাণিত ছিল।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.