@Korobkaq
разраб

Websocket + redux, как правильно подрубать?

Добрый день, подскажите пож., как правильно подрубить ВебСокет к Редаксу.
Стандартный пример, на уровне получения данных от АПИ.

export const GET_DIR = 'GET_DIR';

const ws = new WebSocket('wss://АДРЕС/');

ws.onopen = () => {
console.log('WS Open!');
};
ws.onclose = () => {
console.log('WS Close');
};

// ws.onmessage = (data) => {
// console.log("Получение Данных: ", JSON.parse(data.data));
// return data.data;
// }

export function getDir() {
return function (data, dispatch) {
console.log("Получить путь -> ");

const browseKeyStore = {
method: 'KeyStore',
args: ['S12', 'P12', ''],
};


ws.send(JSON.stringify(browseKeyStore));


return dispatch({
type: GET_DIR,
currentDirectory: 'DATA',
});
};
}

На каком уровне после запроса (ws.send(...), получив данные в ws.onmessage(data)) запихнуть их в диспатч - в payload, причем мне нужно учитывать, что следующий вызов ws.send(...) - поместит в ws.onmessage(data) - другие данные, которые нужно будет обработать по другому.
  • Вопрос задан
  • 56 просмотров
Пригласить эксперта
Ответы на вопрос 1
maxfarseer
@maxfarseer
реакт.рф, обучаю реакту и компании
Вы сами себе на вопрос ответили: ws.onmessage(data)

Внутри обработчика onmessage, в зависимости от того, что пришло в data - вы можете обрабатывать ваши данные различным способом. Чтобы обработанные данные попали в нужный редьюсер, вам нужно диспатчить разные экшены.

Например:

ws.onmessage = (data) => {
  const myData = JSON.parse(data.data); // предположим, что там собаки или кошки
  if (data.data = 'cats') { dispatch(addToCats(data.data) }
  if (... )

  // можете обработать каким-либо образом:
  const newData = '123' + data.data
  dispatch(anyActionCreator(newData)
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы