代码之家  ›  专栏  ›  技术社区  ›  Dakota Maker

Git集线器页面网站不反映本地主机的行为

  •  3
  • Dakota Maker  · 技术社区  · 6 年前

    this link here 我有一个标题,可以把你引向不同的页面。

    当网站打开时,它应该默认为主页,标题为“主页”的标题应该突出显示为橙色。当您选择一个链接时,该链接将变为橙色(非常简单)。在本地运行时,它运行良好,并对我的预期作出反应。

    但在GitHub页面上,当您直接转到站点或刷新时,它不会默认为“选中”任何链接,但当您在初始加载后选择不同链接时,它会表现良好。

    下面的gif直观地演示了这个问题。Localhost在右边,真正的页面在左边:

    https://imgur.com/a/YMZ0Hm3

    我显然是在试图解决这个问题,但我也想知道到底是什么导致了这个问题,因为这似乎是一个很小的问题。

    源代码可以是 found here

    负责的主要路由代码在此处 headerComponent

    <Link onClick = {() => this.handleClick(Routes.HOME_PAGE) } className={this.state.url.toLowerCase() === Routes.HOME_PAGE.toLowerCase() ? 'selected':'nope'} to={Routes.HOME_PAGE}>Home</Link>
    <Link onClick = {() => this.handleClick(Routes.RESUME_PAGE) } className={this.state.url.toLowerCase() === Routes.RESUME_PAGE.toLowerCase() ? 'selected':'nope'} to={Routes.RESUME_PAGE}>Resume</Link>   
    <Link onClick = {() => this.handleClick(Routes.COVER_LETTER_PAGE) } className={this.state.url.toLowerCase() === Routes.COVER_LETTER_PAGE.toLowerCase() ? 'selected':'nope'} to={Routes.COVER_LETTER_PAGE}>Cover Letter</Link> 
    

    2 回复  |  直到 6 年前
        1
  •  1
  •   bwalshy    6 年前

    我想我找到了问题所在。在你的州,你有:

    this.state = {url: this.fullUrl.substr(this.fullUrl.lastIndexOf("/"), this.fullUrl.length - 1)};
    

    https://dakotamaker.github.io/resume-site/resume ,它会将状态设置为 /resume .

    然后在你的 <Link> process.env.PUBLIC_URL https://dakotamaker.github.io/resume-site/ ,通过现场加载,检查 / , , /coverLetter ,与完全等效的url匹配。即。:

    // before evaluation
    className={this.state.url.toLowerCase() === Routes.HOME_PAGE.toLowerCase() ? 'selected':'nope'}
    
    // after evaluation
    className={'/resume' === 'https://dakotamaker.github.io/resume-site/resume' ? 'selected':'nope'}
    

    .handleClick 函数正在设置 url 状态为您在路由文件中定义的常量。所以如果你点击简历页面链接 状态设置为 Routes.RESUME_PAGE . 所以当链接再次检查是否应该添加类名时,可以保证始终选择一个链接。

    this.state = {url: this.fullUrl};
    
        2
  •  0
  •   Dat Tran    6 年前

    原因是您的本地网站位于localhost:3000的根目录下,但是github页面位于子目录下。要解决这个问题,您应该在路由器组件中添加“basename”属性。应该是这样的事情

    <Router history={browserHistory} basename={'resume-site'}>
      <Route path="/" component={App} />
    </Router>
    

    我发现您已经将基本名称设置为env var。因此只需在通过编辑package.json进行构建时注入它:

     "deploy": "PUBLIC_URL=resume-site gh-pages -d build"