Ответ
Хотя Redux изначально создан для клиентских приложений, я использовал его в Node.js для управления состоянием в нескольких сценариях:
1. Server-Side Rendering (SSR) с Next.js: При рендеринге React-компонентов на сервере нужно синхронизировать состояние между клиентом и сервером.
// На сервере (Node.js)
const { createStore } = require('redux');
const { Provider } = require('react-redux');
app.get('*', (req, res) => {
const store = createStore(reducer, preloadedState);
const html = ReactDOMServer.renderToString(
<Provider store={store}>
<App />
</Provider>
);
// Передаем начальное состояние клиенту
const initialState = store.getState();
res.send(`
<script>
window.__PRELOADED_STATE__ = ${JSON.stringify(initialState)}
</script>
${html}
`);
});
2. Управление состоянием в CLI-приложениях: Для сложных CLI-инструментов, где нужно отслеживать состояние выполнения операций.
3. Тестирование Redux-логики: Написание unit-тестов для редьюсеров и экшенов в изоляции от React.
// Тест редьюсера в Node.js
const reducer = require('./reducer');
const { increment } = require('./actions');
describe('counter reducer', () => {
it('should handle INCREMENT', () => {
expect(reducer(0, increment())).toBe(1);
});
});
В чистом backend-контексте чаще использую EventEmitter или конечные автоматы (XState), но Redux полезен для изоморфных приложений.