为什么反应路由器会在派遣时自动返回上一条路线

过山车

我有一个旧的应用程序想要向其添加react-router。具体来说,我正在使用HashRouter该应用程序还使用reduxreact-redux,但没有其他中间件,例如saga或thunk。

该应用程序有多个选项卡,每个选项卡都将挂载loadData以从后端调用当我进入Tab#1并尝试导航至Tab#2时,将loadData调用#2的方法。但是在调用时dispatch,页面会自动返回至标签1。数据正在加载,并且在加载后(已调用所有分派),我尝试导航到tab#2,这次成功了。

我不明白为什么。看起来每次dispatch调用时,路由器都会将窗口位置还原到上一个。有人可以给我提示如何解决吗?

简化代码:

tab#1和tab#2都具有相似的结构

function tab1(props){
const [initialized, setInitialized] = useState(false);
const dispatch = useDispatch();

useEffect(()=>{
  if(!initialized){
    loadData();
    setInitialized(true);
  }
}, [initialized])

function loadData(){
  // if data already in store, exit function early.
  // otherwise:
  dispatch({type: 'REQUEST_DATA'});
  // fetch backend
  // after receive json, dispatch
  dispatch({type:'RECEIVE_DATA', data: json});
}

return (
 // return
)

}

index.js

import React from "react";
import ReactDOM from "react-dom";
import { Provider } from "react-redux";
import { createStore, combineReducers, applyMiddleware } from "redux";
import { HashRouter, Switch, Route } from "react-router-dom";
import logger from "redux-logger";
import * as reducers from "./reducers";
import createPersistedState from './createPersistedState';
...

let middlewares = [];
if (!window.production) {
  middlewares = [logger]
}

const reducer = combineReducers({ ...reducers });

const persistedState = createPersistedState();

const store = createStore(reducer, persistedState, applyMiddleware(...middlewares));

...

const render = () => {
  ReactDOM.render(
    <React.StrictMode>
      <Provider store={store}>
          <div id="root-container">
            <HashRouter>
              <ErrorBoundary >
               <Header />
               <div className="app-wrapper">
                 <Switch>
                   <Route path='/tab1' component={tab1}/>
                   <Route path='/tab2' component={tab2}/>
                 </Switch>
               </div>
               <Footer />
             </ErrorBoundary>
           </HashRouter>
          </div>
      </Provider>
    </React.StrictMode>,
    document.getElementById("app")
  );
};

reducers / index.js

export {default as reducer1} from './reducer1'
export {default as reducer2} from './reducer2'
export {default as reducer3} from './reducer3'
export {default as reducer4} from './reducer4'
过山车

好的原来不是react-router或redux的问题,而是我忽略了要更新的旧的reducer。在该reducer中,默认情况下将window.location.hash重置。这就解释了一切-每个调度都会触发该减速器。删除后,一切正常。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

一条路线上有多个控制器

来自分类Dev

AngularJS-触发控制器时获取上一条路线

来自分类Dev

流星铁路由器用户的订阅速度不够快?加载前一条路线的订阅数据

来自分类Dev

emberjs对一条路线使用多个路径/ URL

来自分类Dev

您如何在铁路由器中转到上一条路线?

来自分类Dev

反应本机导航器推送未定义的崩溃第一条路线

来自分类Dev

如何从一条Laravel路线转换为另一条路线的价值

来自分类Dev

Symfony2 / FosUserBundle-登录前获取上一条路线

来自分类Dev

Talend ESB:如何从另一条路线呼叫一条路线?

来自分类Dev

从另一条路线到一条路线的快速调用GET方法

来自分类Dev

过渡到另一条路线时,如何使ListView保留其滚动?

来自分类Dev

为什么路线要求适用于我的第一条路线而不适用于我的第二条路线?

来自分类Dev

DrawerNavigator在打开时重定向到第一条路线

来自分类Dev

骆驼:从另一条路线调用一条路线并同步返回响应

来自分类Dev

将开放模式作为另一条路线上的一条单独路线

来自分类Dev

如何在react-router-dom v6中返回上一条路由

来自分类Dev

一条路线上有多个控制器

来自分类Dev

调用另一条路线作为返回值

来自分类Dev

流星铁路由器用户的订阅速度不够快?加载前一条路线的订阅数据

来自分类Dev

为什么从一条路线导航到另一条路线时,AngularJS服务无法定义?

来自分类Dev

一条路线中的多个控制器

来自分类Dev

流星铁路由器。一条路线,多个模板。如何?

来自分类Dev

为什么刷新时路由器会重定向到另一条路由?

来自分类Dev

阿帕奇骆驼(Apache Camel),从另一条路线调用一条路线

来自分类Dev

铁路由器仅适用于一条路线

来自分类Dev

一条路线的gzip响应

来自分类Dev

Laravel 5.3从控制器方法重定向到另一条路线

来自分类Dev

Ember - 当在下一条路线的 didTransition 钩子中设置属性时,上一条路线中的观察者会触发

来自分类Dev

在角度 5 中将一条路线导航到另一条路线时如何解码 URL?

Related 相关文章

  1. 1

    一条路线上有多个控制器

  2. 2

    AngularJS-触发控制器时获取上一条路线

  3. 3

    流星铁路由器用户的订阅速度不够快?加载前一条路线的订阅数据

  4. 4

    emberjs对一条路线使用多个路径/ URL

  5. 5

    您如何在铁路由器中转到上一条路线?

  6. 6

    反应本机导航器推送未定义的崩溃第一条路线

  7. 7

    如何从一条Laravel路线转换为另一条路线的价值

  8. 8

    Symfony2 / FosUserBundle-登录前获取上一条路线

  9. 9

    Talend ESB:如何从另一条路线呼叫一条路线?

  10. 10

    从另一条路线到一条路线的快速调用GET方法

  11. 11

    过渡到另一条路线时,如何使ListView保留其滚动?

  12. 12

    为什么路线要求适用于我的第一条路线而不适用于我的第二条路线?

  13. 13

    DrawerNavigator在打开时重定向到第一条路线

  14. 14

    骆驼:从另一条路线调用一条路线并同步返回响应

  15. 15

    将开放模式作为另一条路线上的一条单独路线

  16. 16

    如何在react-router-dom v6中返回上一条路由

  17. 17

    一条路线上有多个控制器

  18. 18

    调用另一条路线作为返回值

  19. 19

    流星铁路由器用户的订阅速度不够快?加载前一条路线的订阅数据

  20. 20

    为什么从一条路线导航到另一条路线时,AngularJS服务无法定义?

  21. 21

    一条路线中的多个控制器

  22. 22

    流星铁路由器。一条路线,多个模板。如何?

  23. 23

    为什么刷新时路由器会重定向到另一条路由?

  24. 24

    阿帕奇骆驼(Apache Camel),从另一条路线调用一条路线

  25. 25

    铁路由器仅适用于一条路线

  26. 26

    一条路线的gzip响应

  27. 27

    Laravel 5.3从控制器方法重定向到另一条路线

  28. 28

    Ember - 当在下一条路线的 didTransition 钩子中设置属性时,上一条路线中的观察者会触发

  29. 29

    在角度 5 中将一条路线导航到另一条路线时如何解码 URL?

热门标签

归档