在 JavaScript 中,可以使用以下方式来实现状态管理:
其中,使用类或对象的方式比较常见。例如:
class Store {
constructor(data) {
this.data = data;
this.listeners = [];
}
getData() {
return this.data;
}
setData(data) {
this.data = data;
this.notifyListeners();
}
addListener(listener) {
this.listeners.push(listener);
}
removeListener(listener) {
const index = this.listeners.indexOf(listener);
if (index !== -1) {
this.listeners.splice(index, 1);
}
}
notifyListeners() {
this.listeners.forEach(listener => listener(this.data));
}
}
const store = new Store({ count: 0 });
store.addListener(data => {
console.log(data);
});
store.setData({ count: 1 }); // 输出 { count: 1 }
以上代码中,我们定义了一个 Store
类,它有一个 data
属性和三个方法: getData
、setData
和 addListener
。在 setData
方法中,我们更新了 data
属性,并调用了 notifyListeners
方法,通知所有监听器数据已经更新。在 notifyListeners
方法中,我们遍历所有监听器,并调用它们,将最新的数据传递给它们。
在 JavaScript 中,可以使用以下方式来实现事件总线:
其中,使用自定义事件的方式比较常见。例如:
class EventBus {
constructor() {
this.listeners = {};
}
on(event, listener) {
if (!this.listeners[event]) {
this.listeners[event] = [];
}
this.listeners[event].push(listener);
}
off(event, listener) {
if (this.listeners[event]) {
const index = this.listeners[event].indexOf(listener);
if (index !== -1) {
this.listeners[event].splice(index, 1);
}
}
}
emit(event, ...args) {
if (this.listeners[event]) {
this.listeners[event].forEach(listener => listener(...args));
}
}
}
const eventBus = new EventBus();
eventBus.on('click', () => {
console.log('Clicked');
});
eventBus.emit('click'); // 输出 Clicked
以上代码中,我们定义了一个 EventBus
类,它有三个方法: on
、off
和 emit
。在 on
方法中,我们将事件名和监听器存储在 listeners
对象中。在 off
方法中,我们从 listeners
对象中删除相应的事件和监听器。在 emit
方法中,我们遍历指定事件的所有监听器,并调用它们,将事件的参数传递给它们。