[英]React-native Redux socket.io session authentication
有關在 http請求之后將redux / react-native連接到socket.io的任何建議嗎? 我需要先創建一個http請求來存儲一個auth會話cookie,然后連接到socket.io。 我見過的所有例子(即https://www.npmjs.com/package/redux-socket.io )都會立即連接到socket.io。 我的想法是在自定義redux中間件中聽取操作和連接:
import React from 'react-native'
import * as actions from './actions/';
import io from 'socket.io-client/socket.io';
export default socketMiddleware = (store) => {
return next => action => {
const result = next(action);
// var socket = io();
//
if (action.type === 'HTTP_CONNECT_SUCCEEDED') {
debugger;
const socket = io('localhost:3000', {jsonp: false);
socket.on('connect', function(){console.log('Connected!')});
}
//
// socket.on('message', data => {
// store.dispatch(actions.addResponse(data));
// });
//
// if (socket && action.type === actions.ADD_MESSAGE) {
// let messages = store.getState().messages;
// socket.emit('message', messages[messages.length -1]);
// }
return result;
};
}
這適用於連接,但我必須在'HTTP_CONNECT_SUCCESS'條件內定義我的套接字,因此我的其他套接字操作和事件是未定義的,直到該操作發生。 如何在操作上連接到WS並公開我的套接字事件和其他操作?
我希望暫時的hack是使我的socket變量全局,並將事件包裝在條件中:
import React from 'react-native'
import * as actions from './actions/';
import io from 'socket.io-client/socket.io';
export default socketMiddleware = (store) => {
return next => action => {
const result = next(action);
globalSocket = typeof globalSocket === 'undefined' ? false : globalSocket
if (action.type === 'HTTP_CONNECT_SUCCEEDED') {
globalSocket = io('http://localhost:3000', {jsonp: false});
globalSocket.on('connect', () => {
console.log('Connected!')
});
}
if (globalSocket != false) {
globalSocket.on('friends', data => {
store.dispatch(actions.updateFriends(data));
})
if (action.type === 'CREATE_QUESTION') {
globalSocket.emit('createQuestion', action.question);
}
}
return result;
};
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.