首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用history.push('somePath_fromParentComp')从其子组件命中父组件内指定的路由?

问如何使用history.push('somePath_fromParentComp')从其子组件命中父组件内指定的路由?
EN

Stack Overflow用户
提问于 2022-07-25 18:57:05
回答 1查看 59关注 0票数 0

这是我的路线结构

index.js

代码语言:javascript
复制
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
    
    <AuthFBContextProvider>
            <LangContextProvider>
                <BrowserRouter>
                    <App />
                </BrowserRouter>
            </LangContextProvider>
    </AuthFBContextProvider>
);

App.js

代码语言:javascript
复制
return (
        <Switch>
          {/* <Route path='/' exact>
            <Redirect to='/en' />
          </Route> */}
          <Route path='/en'>
            <EnglishRouter />
          </Route>
          <Route path="/fr">
            <FrenchRouter/>
          </Route>
          <Route path='*'>
            <NotFound />
          </Route>
        </Switch>
);

EnglishRouter.js (仅在路径为‘/en’时呈现),这是我的父组件

代码语言:javascript
复制
<MainNavigation>
        <p>english route</p>
        <Switch>
            <Route path={path} exact>
                <MainPage />  
            </Route>
            <Route path={`${path}/promotions`} exact> -> renders on en/promotions
                <Promotions />
            </Route>
            **<Route path={`${path}/auth`}> -> renders on en/auth
                <AuthPage />
            </Route>**
        </Switch>
    </MainNavigation>)

AuthPage.js (在‘en/auth’上呈现)是子组件

代码语言:javascript
复制
    <Router>
      <Switch>
        <Route path={`${path}/signup`} component={Signup} exact/>
        <Route path={`${path}/login`} component={Login} exact/>
        <Route path={`${path}/forgot-password`} component={ForgotPassword} exact/>
      </Switch>
    </Router>

Login.js

代码语言:javascript
复制
const Login = () => {
    const authFBCtx = useContext(AuthFBContext);
    const { path, url } = useRouteMatch()
    const history = useHistory();

    const submitHandler = (event) => {
        event.preventDefault();
    
        const enteredEmail = emailInputRef.current.value;
        const enteredPassword = passwordInputRef.current.value;
        authFBCtx.login(enteredEmail, enteredPassword);
        **history.push('en/promotions')**
      }

    return(...<form onSubmit{submitHandler}><form>)

现在的问题是

如果我在从history.push登录后执行Login.js (en/促销或任何其他链接),它将更改为正确的url(‘en/促销’),但Promotion.js不会加载。

现在,我可以手动地将AuthPage.js中的其他路由放在旁边,以捕获路由,然后加载Promotions.js,这将在嵌套时呈现升级。

AuthPage.js更新

代码语言:javascript
复制
 <Route path='/en/promotions' component={Promotions} exact/>
 <Route path={`${path}/login`} component={Login} exact/>
 <Route path={`${path}/signup`} component={Signup} exact/>

,但是active compoent/path仍然发生在AuthPage.js内部,而不是来自父组件,即EnglishRouter.js

我导航的NavLink显示活动路径/路由是'/en/auth‘,甚至在之后

history.push('en/promotions')

​

​

我希望历史记录(‘en/ LoginPage.js’)从内部LoginPage.js中访问位于EnglishRouter.js中的父路由,以便父组件上的活动路由。

我该怎么做??

不管我做什么,都发生在我的孩子身上.我不知道我是否说得很清楚.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-26 01:04:49

问题是在Login.js中,我在App.js中放置了另一个路由器

代码语言:javascript
复制
<Router>
      <Switch>
        <Route path={`${path}/signup`} component={Signup} exact/>
        <Route path={`${path}/login`} component={Login} exact/>
        <Route path={`${path}/forgot-password`} component={ForgotPassword} exact/>
      </Switch>
</Router>

这就是为什么每当我使用历史记录(/en/促销)时,活动路径无法查看此路由器之外的位置,而是查看Login.js中指定的路由.

我花了12个小时为自己感到难过.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73114079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档