Javascript 使用react路由器成功进行异步调用后如何重定向?

Javascript 使用react路由器成功进行异步调用后如何重定向?,javascript,react-router,Javascript,React Router,我正在使用react路由器浏览我的react/flux应用程序 我仍然有问题的地方是:在成功的API之后,重定向到新页面(或者仅仅更改URI参数)的最佳方式是什么 打电话 我有一个API.js,其中包含我的异步调用(使用superagent)。实际调用在my app-actions.js中完成: createWorkspace( workspace ) { Api.createWorkspace( workspace ) .then(function( workspace )

我正在使用react路由器浏览我的react/flux应用程序

我仍然有问题的地方是:在成功的API之后,重定向到新页面(或者仅仅更改URI参数)的最佳方式是什么 打电话

我有一个API.js,其中包含我的异步调用(使用superagent)。实际调用在my app-actions.js中完成:

createWorkspace( workspace ) {
    Api.createWorkspace( workspace )
      .then(function( workspace ) {
        dispatch({ actionType: AppConstants.CREATE_WORKSPACE, workspace });
        history.replaceState('/workspace/' + workspace.body.data._id);
      }, function(error) {
        dispatch({ actionType: AppConstants.FAILED_TO_CREATE, error });
      });
  }
import AppConstants from '../constants/app-constants';
import { dispatch, register } from '../dispatchers/app-dispatcher';
import Api from '../lib/api';
import history from '../lib/history'

export default {
  addRestaurant ( restaurant ) {
    dispatch({ actionType: AppConstants.ADD_RESTAURANT, restaurant });
  },
  removeRestaurant ( restaurant ) {
    dispatch({ actionType: AppConstants.REMOVE_RESTAURANT, restaurant });
  },
  createWorkspace( workspace ) {
    Api.createWorkspace( workspace )
      .then(function( workspace ) {
        dispatch({ actionType: AppConstants.CREATE_WORKSPACE, workspace });
        history.replaceState(null, '#/workspace/' + workspace.body.data._id);
      }, function(error) {
        dispatch({ actionType: AppConstants.FAILED_TO_CREATE, error });
      });
  }
}
我正在调度成功或失败事件。所以一切都是按照通量模式进行的

如您所见,我正在使用
history.replaceState
更改URL。但它正在取代所有的东西,包括散列

老实说,这是一场噩梦。我发现ES5具有react 0.13功能,ES6具有react路由器0.14,ES6具有react路由器1.0解决方案

我甚至不记得在哪里找到这个
历史记录。替换
方法

我用的是什么
  • 反应0.14
  • 反应路由器1.0
  • ES6语法

谁能告诉我哪里出了问题?为什么最直截了当的事情,重定向,会有这么大的影响我应该在这里使用纯JavaScript并自己操作浏览器url吗?

我花了一段时间才弄清楚最佳实践是什么。我就是这样做的

创建一个history.js文件

import createBrowserHistory from 'history/lib/createBrowserHistory'

export default createBrowserHistory();
然后,不是很好的解决方案,我必须替换整个URL,因此我必须在创建新URL时处理哈希符号:

history.replaceState(null, '#/workspace/' + workspace.body.data._id);
下面是我的AppActions.js:

createWorkspace( workspace ) {
    Api.createWorkspace( workspace )
      .then(function( workspace ) {
        dispatch({ actionType: AppConstants.CREATE_WORKSPACE, workspace });
        history.replaceState('/workspace/' + workspace.body.data._id);
      }, function(error) {
        dispatch({ actionType: AppConstants.FAILED_TO_CREATE, error });
      });
  }
import AppConstants from '../constants/app-constants';
import { dispatch, register } from '../dispatchers/app-dispatcher';
import Api from '../lib/api';
import history from '../lib/history'

export default {
  addRestaurant ( restaurant ) {
    dispatch({ actionType: AppConstants.ADD_RESTAURANT, restaurant });
  },
  removeRestaurant ( restaurant ) {
    dispatch({ actionType: AppConstants.REMOVE_RESTAURANT, restaurant });
  },
  createWorkspace( workspace ) {
    Api.createWorkspace( workspace )
      .then(function( workspace ) {
        dispatch({ actionType: AppConstants.CREATE_WORKSPACE, workspace });
        history.replaceState(null, '#/workspace/' + workspace.body.data._id);
      }, function(error) {
        dispatch({ actionType: AppConstants.FAILED_TO_CREATE, error });
      });
  }
}