TGViewer
Frontend | Вопросы собесов Frontend | Вопросы собесов @easy_javascript_ru · 17.6K subscribers
Post #868 5.15K
🤔 Для чего нужен централизованный режим событий?

Это подход к управлению событиями в приложениях, который подразумевает обработку всех событий в одном месте или с использованием единого механизма. Это помогает упростить управление событиями, повысить поддерживаемость и улучшить масштабируемость приложения. Этот подход особенно полезен в сложных приложениях, где множество компонентов взаимодействуют друг с другом через события.

🚩Плюсы

➕Упрощение управления событиями
➕Повышение поддерживаемости
➕Масштабируемость
➕Избежание дублирования кода
➕Лучшая организация взаимодействия между компонентами

🚩Примеры централизованного режима событий:

🟠Vue.js и Vuex
В приложениях, использующих Vue.js, централизованное управление состоянием и событиями часто реализуется с помощью Vuex. Vuex позволяет управлять состоянием приложения и событиями в одном месте.
// store.js
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
state: {
message: ''
},
mutations: {
setMessage(state, message) {
state.message = message;
}
},
actions: {
updateMessage({ commit }, message) {
commit('setMessage', message);
}
}
});

// Component.vue
<template>
<div>
<input v-model="message" @input="updateMessage(message)">
<p>{{ message }}</p>
</div>
</template>

<script>
import { mapState, mapActions } from 'vuex';

export default {
computed: {
...mapState(['message'])
},
methods: {
...mapActions(['updateMessage'])
}
};
</script>


🟠Redux в React
Это библиотека для управления состоянием в приложениях React, которая также предоставляет централизованный механизм для управления событиями и состоянием.
// actions.js
export const setMessage = message => ({
type: 'SET_MESSAGE',
payload: message
});

// reducer.js
const initialState = {
message: ''
};

const reducer = (state = initialState, action) => {
switch (action.type) {
case 'SET_MESSAGE':
return {
...state,
message: action.payload
};
default:
return state;
}
};

export default reducer;

// store.js
import { createStore } from 'redux';
import reducer from './reducer';

const store = createStore(reducer);

export default store;

// Component.js
import React from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { setMessage } from './actions';

const Component = () => {
const message = useSelector(state => state.message);
const dispatch = useDispatch();

const handleChange = (event) => {
dispatch(setMessage(event.target.value));
};

return (
<div>
<input value={message} onChange={handleChange} />
<p>{message}</p>
</div>
);
};

export default Component;


🟠EventEmitter в Node.js
В Node.js можно использовать EventEmitter для централизованного управления событиями.
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter();

// Обработчик события
myEmitter.on('event', (message) => {
console.log('Received:', message);
});

// Генерация события
myEmitter.emit('event', 'Hello, World!');


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 14
More from @easy_javascript_ru
  1. Oct 13, 2026🤔 Что такое репозиторий? Это хранилище кода, файлов и их истории изменений. Используется…
  2. Oct 13, 2026🤔 Как мы можем замерить скорость работы участка кода с date.Now? В JavaScript можно замер…
  3. Oct 12, 2026Post #3039
  4. Oct 12, 2026🤔 Зачем нужен docker? Это инструмент для создания, развертывания и управления контейнерам…
  5. Oct 11, 2026🤔 Для чего нужен тег <noscript>? Он используется для отображения альтернативного контента…
  6. Oct 11, 2026🤔 Какими способами мы можем получить картинку с сервера? В веб-разработке есть разные спо…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →