Middle
Fluxning asosiy konsepsiyasi nima?
sobes.tech AI
AIdan javob
Fluxning asosiy konseptsiyasi ma'lumotlarning yagona yo'nalishda oqishi (unidirectional data flow) ga asoslangan. Ilovaning holati bitta joyda (Store) saqlanadi va bu holatdagi o'zgarishlar faqat Dispatcher orqali, Actions ishlov berilgandan so'ng amalga oshiriladi.
Fluxning asosiy elementlari:
- Actions: Ilovada nima bo'ldi, shuni tasvirlaydi (masalan, "foydalanuvchi tugmani bosdi"). Ular harakat turi va ma'lumotlar bilan yuklamani (payload) o'z ichiga oladi.
- Dispatcher: Barcha Actions uchun yagona kirish nuqtasi. Actions'ni Store'ga yo'naltiradi.
- Store: Muayyan ilova qismining holatini va uni Actionsga javoban o'zgartirish logikasini o'z ichiga oladi. Store holat o'zgarishlarini (Change Event) bildirish uchun voqealarni chiqaradi.
- Views: Foydalanuvchi interfeysi. Store'dan holatni ko'rsatadi. Store'dagi o'zgarish voqealariga javob beradi va mos ravishda yangilanadi. View holatni to'g'ridan-to'g'ri o'zgartirmaydi, balki Actions yaratadi.
Ma'lumotlar oqimi:
- Foydalanuvchi View bilan o'zaro ta'sir qiladi.
- View Action yaratadi.
- Action Dispatcherga yuboriladi.
- Dispatcher Action'ni Store'ga yo'naltiradi.
- Store Action'ni ishlov beradi, holatini o'zgartiradi va Change Event chiqaradi.
- Store'ga obuna bo'lgan View Change Event'ni oladi va yangi holatni ko'rsatib yangilanadi.
// Action misoli
const addTodoAction = (text) => ({
type: 'ADD_TODO',
payload: {
text: text
}
});
// Dispatcher misoli (soddalashtirilgan)
class Dispatcher {
constructor() {
this.callbacks = [];
}
register(callback) {
this.callbacks.push(callback);
}
dispatch(action) {
this.callbacks.forEach(callback => callback(action));
}
}
// Store misoli (soddalashtirilgan)
class TodoStore {
constructor(dispatcher) {
this.todos = [];
dispatcher.register(this.handleAction.bind(this));
}
handleAction(action) {
switch (action.type) {
case 'ADD_TODO':
this.todos.push(action.payload.text);
this.emitChange();
break;
// boshqa holatlar
}
}
getAll() {
return this.todos;
}
// Voqealarga yozilish va yozib olish metodlari
addChangeListener(callback) { /* ... */ }
removeChangeListener(callback) { /* ... */ }
emitChange() { /* ... */ }
}
// View misoli (soddalashtirilgan)
class TodoList extends React.Component {
componentDidMount() {
this.store.addChangeListener(this.updateState);
}
componentWillUnmount() {
this.store.removeChangeListener(this.updateState);
}
updateState() {
this.setState({ todos: this.store.getAll() });
}
handleAddTodo(text) {
this.dispatcher.dispatch(addTodoAction(text));
}
render() {
// Vazifalar ro'yxati va kirish maydonini chizish
}
}
Flux holatni boshqarishni oldindan bilish mumkin bo'lgan tarzda ta'minlaydi va aniq va nazorat qilinadigan ma'lumot oqimi yordamida xatoliklarni aniqlashni osonlashtiradi.