Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.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
Javascript 如何在react路由器dom中获得react导航中的'previous'?_Javascript_Reactjs_React Router_React Navigation_React Router Dom - Fatal编程技术网

Javascript 如何在react路由器dom中获得react导航中的'previous'?

Javascript 如何在react路由器dom中获得react导航中的'previous'?,javascript,reactjs,react-router,react-navigation,react-router-dom,Javascript,Reactjs,React Router,React Navigation,React Router Dom,我用的是5和 我们使用previous来定义是否应该定义back按钮。我们希望在react路由器中有一些等价物 函数应用程序(){ const{previous,goBack,toggleDrawer}=useNavigation(); 返回( {以前的( ) : ( )} ); } 如何在react-router-dom中获得previous中的react-navigation?(正如在const{previous}=useNavigation();中一样,您可以使用链接将路径作为状态传递到

我用的是5和

我们使用
previous
来定义是否应该定义
back
按钮。我们希望在
react路由器
中有一些等价物

函数应用程序(){
const{previous,goBack,toggleDrawer}=useNavigation();
返回(
{以前的(
) : (
)}
);
}

如何在
react-router-dom
中获得
previous
中的
react-navigation
?(正如在
const{previous}=useNavigation();

中一样,您可以使用链接将路径作为状态传递到下一个屏幕

 const { location } = props;  // if you are not getting location as props then use withRouter with your component 

<Link 
  to={{ pathname: '/nextpath',
  state: { prevPath: location.pathname }}}>
  go to next page 
</Link>

我创建了一个历史缩减器来跟踪最后N个历史条目。这个实现是一个“堆栈”,其“top”始终位于索引0处,“top”是当前位置,即您刚才推送的路由,因此索引1将是以前的位置

import { LOCATION_CHANGE } from 'connected-react-router';

const HISTORY_LENGTH = 10;

const initialState = [];

const locationReducer = (state = initialState, action) => {
  const { type } = action;

  switch (type) {
    case LOCATION_CHANGE: {
      const { payload } = action;
      if (
        state.length &&
        state[0].location.pathname === payload.location.pathname
      ) {
        // if pushing same route, return old state
        return state;
      }

      switch (payload.action) {
        case 'REPLACE':
          // if replacing current entry, don't "push" on new route, replace "top"
          return [payload, ...state.slice(1)];

        // handle other action cases to maintain your stack

        default: // PUSH
          // ensure only last HISTORY_LENGTH entries kept
          return [payload, ...state].slice(0, HISTORY_LENGTH);
      }
    }

    default:
      return state;
  }
};

export default locationReducer;
LOCATION\u CHANGE
是由
connected react router
定义的,当您的历史记录接收到位置更改时,将调度该路由器

每个
有效载荷具有以下形状:

{
  location,
  action,
  isFirstRendering,
}

如果希望有选择地渲染“back”按钮,然后您可以检查堆栈,如果有超过1个条目,您可以断言存在要返回的页面。

您想将react router与您的reactjs网站一起使用,对吗?不是在react Native中,是的,我已经在我的reactjs网站中使用react router。我只是尝试移植一个将连接两个naviga的实用程序在RR5!AFAIK中,我无法获得
previous
等价物,
react router dom
没有,但我使用的两种模式是(1)向每个路由推送添加“from path”状态值,或(2)保留“历史堆栈”应用程序内状态,即redux或类似。我使用使用redux存储状态的
连接的react路由器
。谢谢,但我怎么能假设它将是当前交换机的主条目,并且因此不显示后退按钮?(就像我使用
react导航
)@DimitriKopriwa好的,如果我理解你的问题,你问的是一个
开关
语句。外部开关消耗
位置改变的动作
,该动作在
连接的反应路由器
中定义,内部开关消耗有效负载的历史动作,因此你知道如何添加/删除/替换条目在堆栈中,即维护堆栈。要渲染“后退”按钮,只需检查堆栈中有多少项。如何检查堆栈中有多少项以及它们存储在何处?redux?我相信与您发布的内容类似,但使用动态存储创建和一些实用程序读取它们之前的状态?在
r中eact导航
,您可以有多个导航,每个导航都有一个入口点。在
反应路由器
中,您认为我可以通过捕捉
的所有入口点获得相同的行为,还是有我没有想到的副作用?好的,既然您使用的是
连接的反应路由器
,那么您也在使用redux。Th上面的e是一个redux reducer,它侦听位置更改并在应用程序状态中保留历史堆栈。在
react redux
connect
HOC,
state.pathHistory.length>0
中访问它,就像在
CombineReducer
装饰中命名reducer
pathHistory
一样ator.TBH我不太明白你关于入口点的第二个问题。似乎与保持路线历史无关。
{
  location,
  action,
  isFirstRendering,
}