আমি সম্প্রতি Redux আবিষ্কার করেছি । এটি সব ভাল দেখাচ্ছে। রেডাক্স ওভার ফ্লাক্স ব্যবহারের জন্য কি কোনও ডাউনসাইড, গেটচা বা আপস আছে? ধন্যবাদ
আমি সম্প্রতি Redux আবিষ্কার করেছি । এটি সব ভাল দেখাচ্ছে। রেডাক্স ওভার ফ্লাক্স ব্যবহারের জন্য কি কোনও ডাউনসাইড, গেটচা বা আপস আছে? ধন্যবাদ
উত্তর:
রেডাক্স লেখক এখানে!
আমি বলতে চাই আপনি এটি ব্যবহার করে নিম্নলিখিত সমঝোতা করতে চলেছেন:
মিউটেশনগুলি এড়াতে আপনার শিখতে হবে। মিউচ্যুয়াল ডেটা সম্পর্কে ফ্লাক্স নির্বিঘ্নিত, তবে রেডাক্স মিউটেশন পছন্দ করে না এবং অনেকগুলি প্যাকেজ রেডাক্সের পরিপূরক হিসাবে ধরে নেওয়া হয় যে আপনি কখনই রাষ্ট্রকে পরিবর্তন করবেন না। তোমার মত দেব কেবল-প্যাকেজ সঙ্গে এই জোরদার করতে redux-অপরিবর্তনীয়-রাষ্ট্রীয় পরিবর্তিত , ব্যবহার Immutable.js , অথবা ট্রাস্ট নিজেকে এবং নিজের দলের অ mutative কোড লিখতে, কিন্তু এটা কিছু আপনি এই চাহিদা সচেতন হতে হবে প্রয়োজন, এবং আপনার দল দ্বারা গৃহীত একটি সচেতন সিদ্ধান্ত হতে।
আপনাকে সাবধানে আপনার প্যাকেজগুলি বেছে নিতে হবে। সর্দি স্পষ্টভাবে সমাধান করতে যেমন "কাছাকাছি" সমস্যার চেষ্টা করে না পূর্বাবস্থা / পুনরায় করুন , অধ্যবসায় , অথবা ফরম , Redux মিডলওয়্যার এবং দোকান বৃদ্ধি যেমন এক্সটেনশন বিন্দু আছে, এবং এটি একটি উত্পন্ন হওয়া গেছে তরুণ কিন্তু ধনী বাস্তু । এর অর্থ বেশিরভাগ প্যাকেজগুলি নতুন ধারণা এবং ব্যবহারের সমালোচনামূলক ভর এখনও পায়নি। আপনি এমন কোনও কিছুর উপর নির্ভর করতে পারেন যা কয়েক মাস পরে স্পষ্টভাবে একটি খারাপ ধারণা হবে, তবে এটি এখনও বলা শক্ত।
আপনার কাছে এখনও একটি দুর্দান্ত ফ্লো ইন্টিগ্রেশন থাকবে না। ফ্লাক্স বর্তমানে আপনাকে খুব চিত্তাকর্ষক স্ট্যাটিক টাইপ চেক করতে দেয় যা রেডাক্স এখনও সমর্থন করে না । আমরা সেখানে যাব, তবে এতে কিছুটা সময় লাগবে।
আমি মনে করি প্রথমটি নবীনদের পক্ষে সবচেয়ে বড় বাধা, দ্বিতীয়টি অতি উত্সাহী প্রথম দিকে গ্রহণকারীদের জন্য সমস্যা হতে পারে এবং তৃতীয়টিটি আমার ব্যক্তিগত পোষা প্রুভ। এগুলি বাদে, আমি মনে করি না যে রেডাক্স ব্যবহার করে কোনও বিশেষ ডাউনসাইড আনা হয় যা ফ্লাক্স এড়ানো হয়, এবং কিছু লোকেরা বলে থাকেন যে এটি ফ্লাক্সের তুলনায় কিছুটা উত্সাহও রয়েছে।
রেডাক্স ব্যবহারের উত্সাহ সম্পর্কে আমার উত্তরও দেখুন ।
shallowEqual
চেকটি রাষ্ট্র পরিবর্তন হয়েছে কিনা তা নির্ধারণ করতে ব্যবহৃত হয়। তবে এটি ডিপএকুয়াল বা জেএসএন.স্ট্রিফাইটি এবং তুলনা করে প্রতিস্থাপন করা যেতে পারে। শেষ পর্যন্ত এটি কিছুটা কম পারফরম্যান্স - তবে এটি DOM এর সাথে কাজ না করে খাঁটি গণনা - এত দ্রুত। এবং যে কোনও ক্ষেত্রে রেন্ডারিং নিজেই একই
রেডাক্স এবং ফ্লাক্স উভয়কেই প্রচলিত সাধারণ নিদর্শনগুলি আবরণ করার জন্য যথেষ্ট পরিমাণে বয়লারপ্লিট কোডের প্রয়োজন হয়, বিশেষত এটিতে যেগুলি অ্যাসিনক্রোনাস ডেটা আনতে জড়িত। রেডাক্স ডকুমেন্টেশনের বয়লারপ্লেট হ্রাসের জন্য ইতিমধ্যে কয়েকটি মুখ্য উদাহরণ রয়েছে: http://redux.js.org/docs/recips/ReducingBoilerplate.html । আপনি আল্ট বা ফ্লাক্সক্সরের মতো ফ্লাক্স লাইব্রেরি থেকে আপনার প্রয়োজনীয় সমস্ত কিছু পেতে পারেন তবে রেডাক্স বৈশিষ্ট্যগুলির চেয়ে স্বাধীনতা পছন্দ করে। এটি কিছু বিকাশকারীদের পক্ষে একটি নেতিবাচক কারণ হতে পারে কারণ রেডাক্স আপনার রাজ্য সম্পর্কে নির্দিষ্ট অনুমান করে যা অজান্তে অবহেলা করা যেতে পারে।
আপনার প্রশ্নের উত্তর দেওয়ার একমাত্র উপায় হ'ল আপনি যদি কোনও ব্যক্তিগত প্রকল্পে পারেন তবে রেডাক্সকে চেষ্টা করা try রেডাক্স উন্নত বিকাশকারী অভিজ্ঞতার প্রয়োজনের কারণেই এসেছে এবং এটি কার্যকরী প্রোগ্রামিংয়ের পক্ষপাতদুষ্ট। আপনি যদি হ্রাসকারী এবং ফাংশন গঠনের মতো ক্রিয়ামূলক ধারণাগুলির সাথে পরিচিত না হন তবে আপনি ধীর হয়ে যেতে পারেন তবে কেবল সামান্যই। ডেটা প্রবাহে এই ধারণাগুলি আলিঙ্গনের জন্য উত্সাহিত করা সহজ পরীক্ষা এবং ভবিষ্যদ্বাণীযোগ্য।
দাবি অস্বীকার: আমি ফ্লুমম্যাক্স (একটি জনপ্রিয় ফ্লাক্স বাস্তবায়ন) থেকে রেডাক্সে স্থানান্তরিত হয়েছি এবং উত্সাহগুলি যে কোনও ডাউন-সাইডকে ছাড়িয়ে যায়। আমি আমার কোডটিতে অনেক কম যাদু পছন্দ করি। কম ম্যাজিকটি আরও কিছুটা বেশি বয়লারপ্লেটের দামে আসে, তবে এটির মূল্য দিতে খুব কম দাম হয়।
রেডাক্স একটি খাঁটি ফ্লাক্স বাস্তবায়ন নয় তবে এটি অবশ্যই ফ্লাক্স দ্বারা অনুপ্রাণিত। সবচেয়ে বড় পার্থক্য হ'ল এটি এমন একক স্টোর ব্যবহার করে যা আপনার অ্যাপ্লিকেশনের জন্য সমস্ত রাজ্য সমেত একটি রাজ্য অবজেক্টকে আবৃত করে। ফ্লাক্সে আপনার মতো স্টোর তৈরি করার পরিবর্তে আপনি হ্রাসকারী ফাংশনগুলি লিখবেন যা একটি একক অবজেক্টের অবস্থার পরিবর্তন করবে। এই বস্তুটি আপনার অ্যাপ্লিকেশনটিতে সমস্ত রাজ্যের প্রতিনিধিত্ব করে। রেডাক্সে আপনি বর্তমান ক্রিয়া এবং অবস্থা পাবেন এবং একটি নতুন রাষ্ট্র ফিরিয়ে আনবেন। তার অর্থ ক্রিয়াগুলি ক্রমযুক্ত এবং রাষ্ট্র অপরিবর্তনীয়। এটি আমাকে রেডাক্সের সবচেয়ে সুস্পষ্ট কনসে নিয়ে আসে (আমার মতে)।
এর কয়েকটি কারণ রয়েছে:
১. সহবাস - স্টোরের রাজ্যটি সর্বদা হ্রাসকারীর দ্বারা পরিবর্তন করা হয় সুতরাং কে কী পরিবর্তন করে তা সহজে ট্র্যাকিং।
২. পারফরম্যান্স - কারণ এটি অপরিবর্তনীয়, রেডাক্স কেবলমাত্র পূর্ববর্তী অবস্থা! == বর্তমান অবস্থা এবং যদি তাই রেন্ডার করতে হয় তবে তা পরীক্ষা করা দরকার। রেন্ডারিং নির্ধারণের জন্য প্রতি একক সময় রাষ্ট্রকে লুপ করতে হবে না।
৩. ডিবাগিং - টাইম ট্র্যাভেল ডিবাগিং এবং হট রিলোডিংয়ের মতো নতুন দুর্দান্ত ধারণা ।
আপডেট: যদি তা যথেষ্ট অনুপ্রাণিত না হয় তবে লি বায়রন অপরিবর্তনীয় ইউজার ইন্টারফেস সম্পর্কে দুর্দান্ত আলোচনা দেখুন ।
এই ধারণাটি বজায় রাখতে রেডাক্সের কোডবেস / লাইব্রেরিগুলির মাধ্যমে বিকাশকারীদের শৃঙ্খলা দরকার। আপনাকে নিশ্চিত করতে হবে যে আপনি গ্রন্থাগারগুলি বেছে নিয়েছেন এবং একটি অ-পরিবর্তনীয় পদ্ধতিতে কোড লিখছেন।
যদি আপনি ফ্লাক্স ধারণাগুলির বিভিন্ন বাস্তবায়ন (এবং আপনার প্রয়োজনের জন্য সবচেয়ে ভাল কাজ করে) সম্পর্কে আরও জানতে চান তবে এই দরকারী তুলনাটি পরীক্ষা করে দেখুন ।
এর পরে, আমাকে অবশ্যই স্বীকার করতে হবে যে জেএসের ভবিষ্যতের বিকাশ যেদিকে চলছে রেডাক্স (এই লাইনগুলি লেখার ক্ষেত্রে)।
অন্যান্য ফ্লাক্স বিকল্পের তুলনায় রেডাক্সকে ব্যবহার করার বৃহত্তম সুবিধাগুলির মধ্যে একটি হ'ল আরও কার্যকরী পদ্ধতির দিকে আপনার চিন্তাভাবনাটিকে পুনরায় তৈরি করার ক্ষমতা। একবার আপনি যখন বুঝতে পারবেন তারগুলি কীভাবে সংযুক্ত হয় আপনি তার অত্যাশ্চর্য কমনীয়তা এবং নকশার সরলতা বুঝতে পারেন এবং কখনই ফিরে যেতে পারবেন না।
আমি ব্যবহার পছন্দ Redux যেমন একটি দোকান যা রাষ্ট্র ব্যবস্থাপনা অনেক সহজ তুলনা করে তোলে ব্যবহার সর্দি , এছাড়াও Redux DevTools এটা সত্যিই সহায়ক সরঞ্জামগুলি আপনি দেখুন সেখানে কি আপনি কিছু কার্যকর ডেটার সাথে আপনার রাষ্ট্র সঙ্গে কাজ করা যাক এবং এটি সত্যিই ইনলাইন উন্নয়নশীল সরঞ্জাম প্রতিক্রিয়া সঙ্গে আছে।
এছাড়াও Redux আরো নমনীয়তা মত অন্যান্য জনপ্রিয় অবকাঠামো এর মাধ্যমে ব্যবহার পেয়েছে কৌণিক । যাইহোক, আসুন দেখুন Redux কীভাবে নিজেকে একটি কাঠামো হিসাবে পরিচয় করিয়ে দেয়।
রেডাক্সের তিনটি নীতি রয়েছে যা রেডাক্সকে খুব ভালভাবে প্রবর্তন করতে পারে এবং এগুলিই রেডাক্স এবং ফ্লাক্সের মধ্যে প্রধান পার্থক্য।
সত্যের একক উত্স
আপনার সম্পূর্ণ অ্যাপ্লিকেশনটির স্থিতি একটি স্টোরের মধ্যে কোনও বস্তু গাছে সংরক্ষণ করা হয়।
এটি সর্বজনীন অ্যাপ্লিকেশনগুলি তৈরি করা সহজ করে তোলে কারণ আপনার সার্ভার থেকে রাষ্ট্র ক্রিয়াকলাপযুক্ত এবং কোনও অতিরিক্ত কোডিং প্রচেষ্টা ছাড়াই ক্লায়েন্টের মধ্যে হাইড্রেটেড হতে পারে। একটি একক রাষ্ট্র গাছ কোনও অ্যাপ্লিকেশন ডিবাগ করা বা পরীক্ষা করাও সহজ করে তোলে; এটি আপনাকে দ্রুত বিকাশের চক্রের জন্য বিকাশে আপনার অ্যাপ্লিকেশনটির অবস্থা ধরে রাখতে সক্ষম করে। কিছু কার্যকারিতা যা প্রথাগতভাবে বাস্তবায়ন করা কঠিন - উদাহরণস্বরূপ - পূর্বাবস্থায় / পুনরায় করুন - হঠাৎ বাস্তবায়নের জন্য তুচ্ছ হয়ে উঠতে পারে, যদি আপনার সমস্ত রাজ্য একক গাছে সংরক্ষণ করা হয়।
console.log(store.getState())
/* Prints
{
visibilityFilter: 'SHOW_ALL',
todos: [
{
text: 'Consider using Redux',
completed: true,
},
{
text: 'Keep all state in a single tree',
completed: false
}
]
}
*/
রাষ্ট্র কেবল পঠনযোগ্য
রাষ্ট্র পরিবর্তন করার একমাত্র উপায় হ'ল কোনও ক্রিয়াকলাপ ছড়িয়ে দেওয়া, যা ঘটেছিল তা বর্ণনা করে এমন একটি বস্তু।
এটি নিশ্চিত করে যে ভিউ বা নেটওয়ার্ক কলব্যাক উভয়ই সরাসরি রাজ্যে সরাসরি লিখবে না। পরিবর্তে, তারা রাষ্ট্রকে রূপান্তর করার জন্য একটি অভিপ্রায় প্রকাশ করে। যেহেতু সমস্ত পরিবর্তনগুলি কেন্দ্রীভূত এবং কঠোর ক্রমে একের পর এক ঘটে থাকে, তাই দেখার জন্য কোনও সূক্ষ্ম রেসের শর্ত নেই। ক্রিয়াগুলি কেবল সরল অবজেক্ট হিসাবে, এগুলি লগ করা যায়, সিরিয়ালাইজ করা যায়, সংরক্ষণ করা যায় এবং পরে ডিবাগিং বা পরীক্ষার উদ্দেশ্যে পুনরায় খেলানো যায়।
store.dispatch({
type: 'COMPLETE_TODO',
index: 1
})
store.dispatch({
type: 'SET_VISIBILITY_FILTER',
filter: 'SHOW_COMPLETED'
})
খাঁটি ফাংশন দিয়ে পরিবর্তনগুলি করা হয়
কীভাবে রাজ্য গাছকে ক্রিয়া দ্বারা রূপান্তরিত করা হয় তা নির্দিষ্ট করতে, আপনি খাঁটি হ্রাসকারী লিখেন।
হ্রাসকারীরা কেবল খাঁটি ফাংশন যা পূর্ববর্তী অবস্থা এবং একটি পদক্ষেপ নেয় এবং পরবর্তী অবস্থানে ফিরে আসে। পূর্ববর্তী অবস্থার পরিবর্তনের পরিবর্তে নতুন রাষ্ট্রের অবজেক্টগুলি ফিরিয়ে দিতে ভুলবেন না। আপনি একটি একক রিডুসার দিয়ে শুরু করতে পারেন এবং আপনার অ্যাপ্লিকেশনটি বাড়ার সাথে সাথে এটিকে ছোট ছোট হ্রাসকারীগুলিতে ভাগ করুন যা রাজ্য গাছের নির্দিষ্ট অংশগুলি পরিচালনা করে। হ্রাসকারীরা কেবল ফাংশন হওয়ায়, আপনি যে ক্রমে ডাকা হয় সেটিকে আপনি নিয়ন্ত্রণ করতে পারেন, অতিরিক্ত ডেটা পাস করতে পারেন, বা পৃষ্ঠাসমূহের মতো সাধারণ কাজের জন্য পুনরায় ব্যবহারযোগ্য হ্রাসকারীও করতে পারেন।
function visibilityFilter(state = 'SHOW_ALL', action) {
switch (action.type) {
case 'SET_VISIBILITY_FILTER':
return action.filter
default:
return state
}
}
function todos(state = [], action) {
switch (action.type) {
case 'ADD_TODO':
return [
...state,
{
text: action.text,
completed: false
}
]
case 'COMPLETE_TODO':
return state.map((todo, index) => {
if (index === action.index) {
return Object.assign({}, todo, {
completed: true
})
}
return todo
})
default:
return state
}
}
import { combineReducers, createStore } from 'redux'
let reducer = combineReducers({ visibilityFilter, todos })
let store = createStore(reducer)
আরও তথ্যের জন্য এখানে যান
যতদূর আমি জানি, রিডাক্স প্রবাহ দ্বারা অনুপ্রাণিত। ফ্লাক্স এমভিসি (মডেল ভিউ কন্ট্রোলার) এর মতো একটি আর্কিটেকচার। ফেসবুক এমভিসি ব্যবহার করার সময় স্কেলাবিলিটি সমস্যার কারণে ফ্লাক্স প্রবর্তন করে। সুতরাং প্রবাহ কোনও বাস্তবায়ন নয়, এটি কেবল একটি ধারণা। আসলে রিডেক্স হ'ল ফ্লাক্সের বাস্তবায়ন।