Skip to content

Instantly share code, notes, and snippets.

@me-shaon
Last active March 18, 2018 05:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save me-shaon/30ac0d2e71aa7904ff800c90cd3374bb to your computer and use it in GitHub Desktop.
Save me-shaon/30ac0d2e71aa7904ff800c90cd3374bb to your computer and use it in GitHub Desktop.
export default function createStore(reducer) {
// আমাদের currentState রাখার জন্য একটা ভ্যারিয়েবল লাগবে
let currentState = null;
// createStore এ যেই reducer টা পাঠানো হয়েছে সেটার রেফারেন্স
// রাখার জন্য একটা ভ্যারিয়েবল লাগবে
let mainReducer = reducer;
// subscribe মেথডে যেই ফাংশনটা পাঠানো হবে সেটার রেফারেন্স
// রাখার জন্য একটা ভ্যারিয়েবল লাগবে
let mainListener = null;
// এই মেথডটা শুধু currentState টা রিটার্ন করবে
function getState() {
return currentState;
}
// এই মেথডটা দিয়ে জাস্ট listener মেথডটা রেজিস্টার করা হয়
function subscribe(listener) {
mainListener = listener;
}
function dispatch(action) {
// dispatch ফাংশন যখন কল হবে তখন তাতে একটা একশন পাঠানো হবে
// আমরা reducer ফাংশনটার যেই রেফারেন্স রেখেছি সেটা ব্যবহার করে তাতে
// বর্তমান state আর action টা পাস করবো, আরে সেটা থেকে রিটার্ন হিসেবে
// নতুন একটা state পাবো, সেটাই তখন হবে currentState
currentState = mainReducer(currentState, action);
// আর যেহেতু একটা listener ফাংশন আমাদের কাছে রেজিস্টার করা ছিলো যে,
// কোনো একশন হলে সে listen করতে চায়, তাই আমরা এখন তাকেও কল দিয়ে
// জানায় দিবো যে কিছু একটা ঘটেছে
mainListener();
}
return {
dispatch,
getState,
subscribe
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment