Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ReactJS+;flux—如何处理类似会话的参数(伪授权)_Reactjs_Flux_React Router - Fatal编程技术网

ReactJS+;flux—如何处理类似会话的参数(伪授权)

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) {

以下是用例:

我的reactjs应用程序中有两个组件。这两个组件都通过WebSocket从远程服务器接收数据。我不想让我的组件或存储知道数据源——所有websocket逻辑都驻留在ActionCrators和我称之为SocketListeners的东西中

下面是这样一个侦听器的示例:

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和。。。祝你好运