2016-03-23 1 views
7

У меня есть проект, в котором сервер nodejs доставляет push-события на панель управления через socket.io, я использую Redux. Когда новые данные получены, действие запускается для обновления всех соответствующих компонентов, хотя я не уверен, что способ, которым я это делаю, является правильным.Каков правильный способ отправки действия, не связанного с компонентом с помощью Redux?

Это, как я могу отслеживать новые входящие данные с сервера:

socket.on('incidents', state => { 
    boundActionSetIncidentsList(state); 
    }); 

И это ограниченное творец действия, которое вызывается на новых данных:

import { store } from '../index'; 

    export function boundActionSetIncidentsList(incidents) { 
    store.dispatch(actionSetIncidentsList(incidents)); 
    } 

мне нужна магазин в чтобы отправить действие, как вы можете видеть, я зверски, импортируя его из основного index.js. Это, как он создается:

export const store = createStore(); 

Будучи очень новым реагировать и перевождь мне было интересно, что это перевождь-способ диспетчеризации действий, которые не запускаются из контейнера или презентационный компонента. Спасибо!!

ответ

2

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

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

https://github.com/itaylor/redux-socket.io

+0

Действительно, упаковка на самом деле является самым простым способом для продолжения, хотя использование промежуточного программного обеспечения, безусловно, более изящно, спасибо Брэндон. – Slartibartfast

2

Общее предложение было бы управлять сокет-соединение в либо Redux промежуточного слоя (который имеет доступ к магазина dispatch метод) или в компоненте React, который обрабатывает сокет на компоненте mount/unmount и может использовать функцию React-Redux connect для получения доступа к dispatch (или создателям предзаписывающих действий для использования с событиями сокета).

Смежные вопросы