Javascript 如何在react路由器dom中获得react导航中的'previous'?
我用的是5和 我们使用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();中一样,您可以使用链接将路径作为状态传递到
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
装饰中命名reducerpathHistory
一样ator.TBH我不太明白你关于入口点的第二个问题。似乎与保持路线历史无关。
{
location,
action,
isFirstRendering,
}