ReactJS+;flux—如何处理类似会话的参数(伪授权)
以下是用例: 我的reactjs应用程序中有两个组件。这两个组件都通过WebSocket从远程服务器接收数据。我不想让我的组件或存储知道数据源——所有websocket逻辑都驻留在ActionCrators和我称之为SocketListeners的东西中 下面是这样一个侦听器的示例:ReactJS+;flux—如何处理类似会话的参数(伪授权),reactjs,flux,react-router,Reactjs,Flux,React Router,以下是用例: 我的reactjs应用程序中有两个组件。这两个组件都通过WebSocket从远程服务器接收数据。我不想让我的组件或存储知道数据源——所有websocket逻辑都驻留在ActionCrators和我称之为SocketListeners的东西中 下面是这样一个侦听器的示例: var listen = function (socket) { socket .on(Messages.LIGHTS_CHANGED, function (newConfiguration) {
var listen = function (socket) {
socket
.on(Messages.LIGHTS_CHANGED, function (newConfiguration) {
AppDispatcher.dispatch({
type: LightActionTypes.SUBSTITUTE_LIGHT_CONFIGURATION,
payload: newConfiguration
});
})
};
module.exports = {
listen: listen
};
因为它是一个websocket,所以我需要知道远程url。
我想让我的用户在我的主页上提供这个url,在此之前,我的组件(实际上是路由)不应该可用,用户应该被重定向到他能够指定这个url的页面
所以我需要一个类似于登录流的东西——但这里的关键属性不是登录和密码,而是远程url
您将如何像状态一样管理此会话
我试过这样的方法:
在我的表单(如home view)中,我有一个函数:
handleConnectionConfirmed: function(event) {
event.preventDefault();
ActionCreator.saveRemoteUrl(
this.state.remoteUrl
);
},
init: function () {
_socket = WebSocketFactory.lightsWebSocket();
SocketListener.listen(_socket);
},
这会导致更新我的配置存储:
var _lightsUrl = '';
var _temperatureUrl = '';
var ConfigurationStore = {
lightsSocketEndpoint: function () {
return _lightsUrl;
},
temperatureSocketEndpoint: function () {
return _temperatureUrl;
}
};
然后我的两个组件都有:
componentWillMount: function () {
ActionCreator.init();
},
初始化函数:
handleConnectionConfirmed: function(event) {
event.preventDefault();
ActionCreator.saveRemoteUrl(
this.state.remoteUrl
);
},
init: function () {
_socket = WebSocketFactory.lightsWebSocket();
SocketListener.listen(_socket);
},
最后一个片段:
lightsWebSocket: function () {
return io.connect(
ConfigurationStore.lightsSocketEndpoint()
)
},
问题是:只要我刷新任何页面,当然我的配置存储就会被清除
如何在不使用外部存储器的情况下使其持久化
另外,您知道如何配置react router,以便在未指定远程url且用户试图打开其中一个组件所在的站点时,它可以将我重定向到“登录”页面?使用或。例如:
在商店的构造函数中,执行以下操作:
_lightsUrl = localStorage.getItem('lightsUrl') || '';
在商店的调度处理程序中:
_lightsUrl = newLightsUrl;
localStorage.setItem('newLightsUrl');
这里有一个很好的教程,它以这种方式进行身份验证(不要介意“Rails”部分):使用或。例如:
在商店的构造函数中,执行以下操作:
_lightsUrl = localStorage.getItem('lightsUrl') || '';
在商店的调度处理程序中:
_lightsUrl = newLightsUrl;
localStorage.setItem('newLightsUrl');
这里有一个很好的教程,它以这种方式进行身份验证(不要介意“Rails”部分):使用或。例如:
在商店的构造函数中,执行以下操作:
_lightsUrl = localStorage.getItem('lightsUrl') || '';
在商店的调度处理程序中:
_lightsUrl = newLightsUrl;
localStorage.setItem('newLightsUrl');
这里有一个很好的教程,它以这种方式进行身份验证(不要介意“Rails”部分):使用或。例如:
在商店的构造函数中,执行以下操作:
_lightsUrl = localStorage.getItem('lightsUrl') || '';
在商店的调度处理程序中:
_lightsUrl = newLightsUrl;
localStorage.setItem('newLightsUrl');
这里有一个很好的教程,它以这种方式进行身份验证(不要介意“Rails”部分):我认为使用localStorage/sessionStore更干净。您不需要额外的库,而且不需要在每次请求时都将此url发送到服务器(cookie也会发生这种情况)。除非你必须支持IE8,在这种情况下:使用cookies和。。。祝你好运。不过我认为使用localStorage/sessionStore更干净。您不需要额外的库,而且不需要在每次请求时都将此url发送到服务器(cookie也会发生这种情况)。除非你必须支持IE8,在这种情况下:使用cookies和。。。祝你好运。不过我认为使用localStorage/sessionStore更干净。您不需要额外的库,而且不需要在每次请求时都将此url发送到服务器(cookie也会发生这种情况)。除非你必须支持IE8,在这种情况下:使用cookies和。。。祝你好运。不过我认为使用localStorage/sessionStore更干净。您不需要额外的库,而且不需要在每次请求时都将此url发送到服务器(cookie也会发生这种情况)。除非你必须支持IE8,在这种情况下:使用cookies和。。。祝你好运