Middle
V čom spočíva hlavná koncepcia Flux?
sobes.tech AI
Odpoveď od AI
Hlavná koncepcia Flux spočíva v jednosmernom toku dát (unidirectional data flow). Stav aplikácie je uložený na jednom mieste (Store) a zmeny tohto stavu sú možné iba prostredníctvom Dispatcher, ktorý spracováva Actions.
Kľúčové prvky Flux:
- Actions: Opisujú, čo sa stalo v aplikácii (napríklad "používateľ klikol na tlačidlo"). Obsahujú typ akcie a užitočnú záťaž (payload) s dátami.
- Dispatcher: Jediný vstupný bod pre všetky Actions. Presmerováva Actions do Store.
- Store: Obsahuje stav určitej časti aplikácie a logiku jeho zmeny ako reakciu na Actions. Store emituje udalosti o zmene stavu (Change Event).
- Views: Predstavujú používateľské rozhranie. Zobrazujú stav zo Store. Reagujú na udalosti zmeny Store a aktualizujú sa príslušne. View nemení stav priamo, ale vytvára Actions.
Tok dát:
- Používateľ interaguje s View.
- View vytvára Action.
- Action sa odosiela do Dispatcher.
- Dispatcher presmerováva Action do Store.
- Store spracováva Action, mení svoje stav a emituje Change Event.
- View, ktoré sú prihlásené k Store, dostávajú Change Event a aktualizujú sa, zobrazujúc nový stav.
// Príklad Action
const addTodoAction = (text) => ({
type: 'ADD_TODO',
payload: {
text: text
}
});
// Príklad Dispatcher (zjednodušený)
class Dispatcher {
register(callback) {
this.callbacks.push(callback);
}
dispatch(action) {
this.callbacks.forEach(callback => callback(action));
}
}
// Príklad Store (zjednodušený)
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;
// iné prípady
}
}
getAll() {
return this.todos;
}
// Metódy na odber a odhlásenie od udalostí
addChangeListener(callback) { /* ... */ }
removeChangeListener(callback) { /* ... */ }
emitChange() { /* ... */ }
}
// Príklad View (zjednodušený)
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() {
// Vykreslenie zoznamu úloh a poľa na zadanie
}
}
Flux zabezpečuje predvídateľné riadenie stavu a uľahčuje ladenie vďaka jasnému a kontrolovanému toku dát.