首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用GatsbyJS根据路由呈现组件?

如何使用GatsbyJS根据路由呈现组件?
EN

Stack Overflow用户
提问于 2019-08-10 06:54:01
回答 2查看 2.1K关注 0票数 1

我使用GatsbyJS,并试图根据URL的路由呈现不同的header

例子:

mydomain.com/ =>应该呈现HeaderLanding

mydomain.com/blog =>应该呈现HeaderMain

有人知道根据layout.js文件中的路由创建条件呈现以显示组件的正确方法吗?

谢谢您一直鼓励我。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// layout.js

import React from "react"
import PropTypes from "prop-types"
import HeaderLanding from "./header-landing"
import HeaderMain from "./header-main"
import Footer from "./footer"

const Layout = ({ children }) => {
  return (
    <>
      <Header/>
      <div className="content-wrapper">
        <main>{children}</main>
      </div>
      <Footer/>
    </>
  )
}

export default Layout
EN

回答 2

Stack Overflow用户

发布于 2019-08-10 07:53:45

@ravibagul91 91已经回答了很多问题,但是盖茨比并没有使用react-router-dom

如果Layout是一个页面组件,那么盖茨比会给它传递一个location道具。您可以提取location.pathname并在那里应用您的逻辑

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const Layout = ({ children, location }) => {
  const isMain = location.pathname === 'your-path'

  return (
    <>
      { isMain ? <HeaderMain> : <HeaderLanding> }
      <div className="content-wrapper">
        <main>{children}</main>
      </div>
      <Footer/>
    </>
  )
}

export default Layout

如果Layout不是页面组件,则可以从@reach/router导入特殊的Location

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { Location } from '@reach/router' // gatsby's dep

const Layout = ({ children }) => {
  return (
    <Location>
       {({ location }) => (
         ...
       )}
    </Location>

  )
}

或者简单地将location道具从Gatsby页面组件传递到每个页面中的该组件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import Layout from '../components/layout'

export default ({ location }) => (
  <Layout location={location}>
    ...
  </Layout>
)
票数 4
EN

Stack Overflow用户

发布于 2019-08-10 07:06:31

您可以使用location对象的withRouter自组织。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { withRouter } from 'react-router-dom';

const Layout = ({ children, location }) => {

  return (
    <>
      {location.pathname.split('/')[1] ==="blog" ? <HeaderMain /> : <HeaderLanding /> }
      <div className="content-wrapper">
        <main>{children}</main>
      </div>
      <Footer/>
    </>
  )
}

export default withRouter(Layout)

更新

Gatsby v2@reach/routerreact-router切换路由器

文档

在v1中,布局组件可以访问历史记录、位置和匹配道具。在v2中,只有页面可以访问这些道具。如果在布局组件中需要这些道具,请从页面中传递它们。

所以你的Layout组件应该是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const Layout = ({ children, location }) => {

  return (
    <>
      {location.pathname.split('/')[1] ==="blog" ? <HeaderMain /> : <HeaderLanding /> }
      <div className="content-wrapper">
        <main>{children}</main>
      </div>
      <Footer/>
    </>
  )
}

export default Layout

您的Page组件应该是,(仅举个例子)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React from "react"
import Layout from "../components/layout"
export default props => (
  <Layout location={props.location}> //Pass location here
    <div>Hello World</div>
  </Layout>
)

你可以使用Location

通常,您只能访问路由组件中的位置,location为您的应用程序中的任何位置提供了一个子渲染支持。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Location>
  {props => {
    props.location
    props.navigate
  }}
</Location>

// usually folks use some destructuring
<Location>
  {({ location })=> {
    // ...
  }}
</Location>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57443187

复制
相关文章
【Android 组件化】路由组件 ( 使用 JavaPoet 生成路由表类 )
在 【Android 组件化】路由组件 ( 构造路由表中的路由信息 ) 博客中解析了注解的节点及注解属性 , 将路由信息封装在了 RouteBean 中 ;
韩曙亮
2023/03/29
6160
【Android 组件化】路由组件 ( 使用 JavaPoet 生成路由表类 )
【Android 组件化】路由组件 ( 路由组件结构 )
在之前博客 【Android 组件化】使用 Gradle 实现组件化 ( 组件 / 集成模式下的 Library Module 开发 ) 的组件化项目中 , 可能涉及到跨 Module 的调用 , 如在 library1 模块中打开 library2 模块中的 Activity 界面 , 或调用其它 Module 中的功能 ;
韩曙亮
2023/03/29
4400
【Android 组件化】路由组件 ( 路由组件结构 )
【Android 组件化】路由组件 ( 路由框架概述 )
路由框架 仅限于在 集成模式 下使用 , 组件模式下 , 路由框架不起任何作用 ;
韩曙亮
2023/03/29
5330
vue 路由组件
单页应用(single page web application,SPA),是在一个页面完成所有的业务功能,浏览器一开始会加载必需的HTML、CSS和JavaScript,之后所有的操作都在这张页面完成,这一切都由JavaScript来控制。
章鱼喵
2019/10/17
6250
【Android 组件化】路由组件 ( 构造路由表中的路由信息 )
在【Android 组件化】路由组件 ( 注解处理器参数选项设置 ) 博客中在注解处理器中 , 获取了在 build.gradle 中设置的参数 ;
韩曙亮
2023/03/29
5520
【Android 组件化】路由组件 ( 构造路由表中的路由信息 )
eclipse如何根据类名查找该类所属的maven组件
这个需求是后期整改项目或者看别人的代码时有时会遇到的一个问题,我的解决方案类似于曲线救国,下面给出思路:
johnhuster的分享
2022/03/29
9130
eclipse如何根据类名查找该类所属的maven组件
根据公司的业务需求我是如何封装组件的
作者:lin1997 原文链接:https://juejin.im/post/6888125003024629768
coder_koala
2020/11/10
3.7K0
根据公司的业务需求我是如何封装组件的
ASP.NET的路由系统:根据路由规则生成URL
前面我们已经提到过,ASP.NET 的路由系统主要具有两个方面的应用,其一就是通过注册URL模板与物理文件路径的匹配实现请求地址和物理地址的分离;另一个则是通过注册的路由规测生成一个相应的URL。后者通过调用RouteCollection类型的GetVirtualPath方法来实现。[源代码从这里下载] 如下面的代码片断所示,GetVirtualPath定义了两个GetVirtualPath方法重载,它们共同的参数requestContext和values分别表示请求上下文(RouteData和HTTP上下
蒋金楠
2018/01/15
1.3K0
ASP.NET的路由系统:根据路由规则生成URL
【Android 组件化】路由组件 ( 注解处理器中使用 JavaPoet 生成代码 )
在 【Android 组件化】路由组件 ( 注解处理器获取被注解的节点 ) 博客中 声明了 支持的注解类型 , 并在 Activity 中使用了注解 , 在 注解处理器 中检测出来使用注解的 类节点 TypeElement ;
韩曙亮
2023/03/29
4970
【Android 组件化】路由组件 ( 注解处理器中使用 JavaPoet 生成代码 )
React路由 及 React 路由中核心组件
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/136454.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/07
1.4K0
【Android 组件化】路由组件 ( 组件间共享的服务 )
路由除了支持 Activity 之外 , 还要支持 组件间共享的服务 如 工具类 , 逻辑功能 等 ;
韩曙亮
2023/03/29
8720
【Android 组件化】路由组件 ( 组件间共享的服务 )
Vue 组件通信与路由
命名路由 绑定自定义的属性:to =" {name: '路由的名字'}” 路由的参数 path: ' /user/:id :to= "{name: 'user' , params:{id:1}}" path: ' /user' :to= " {name:'user' , query:{userId:1}}" 嵌套路由(应用子的路由是不同的页面结构) /home/music ===> /home/ movie 一个router-view中嵌套 另外一个route-view
默默的成长
2022/10/29
7100
springboo根据目录结构自动生成路由前缀
配置文件中配置api的根目录 missyou: api-package: com.lin.missyou.api 重写getMappingForMethod方法 import org.springframework.beans.factory.annotation.Value; import org.springframework.web.servlet.mvc.method.RequestMappingInfo; import org.springframework.web.servlet.mvc.m
听城
2020/05/09
5920
如何使用Vue封装组件[通俗易懂]
想封装组件呢首先要思考: 1.你想向用户暴露哪些属性 (props) 2.你想向用户暴露哪些事件,让用户监听来处理后续的业务 ($emit,@) 3.你想让用户嵌入哪些自定义的内容(slot)
全栈程序员站长
2022/11/09
1.7K0
如何在路由绑定中使用 IParsable
IParsable 是 .Net 7 中新增的接口,它可以将字符串转换为对应的实体。在 Controller 的 Route 绑定中可以使用 IParsable 来绑定复杂的实体。
newbe36524
2023/08/23
1460
Vue使用bus进行组件间、父子路由间通信
Vue使用bus进行组件间、父子路由间通信
Java架构师必看
2021/09/14
5270
ETL(八):路由器(rounter)转换组件的使用
注意:edw_emp_deptno_20和edw_emp_deptno_30都要按照图中方式进行修改。 ⑤ 使用CTRL + S保存该创建的任务;
数据分析与统计学之美
2021/11/25
5280
路由组件传参实例 原
在组件中使用$route会使之与其对应路由形成高度耦合,从而使组件只能在某些特定的URL上使用,限制了其灵活性
tianyawhl
2019/04/04
7190
【Android 组件化】路由组件 ( 生成 Root 类记录模块中的路由表 )
注解处理器 为每个 Module 模块生成一个路由表 , 该模块下凡是被 @Route 标注的路由节点都在该路由表中维护 ;
韩曙亮
2023/03/29
2.6K0
【Android 组件化】路由组件 ( 生成 Root 类记录模块中的路由表 )
如何使用小程序表单组件
上一篇文章中,我们给大家介绍了小程序的视图容器及基础内容组件,该组件主要应用是输出内容。接下来这篇文章中,我们将继续介绍小程序最常用的表单组件,该组件主要应用是获取输入内容。表单组件分为11个组件,我们将对这11个组件使用做详细的介绍。
此昵称已隐藏_
2018/11/06
5.2K0

相似问题

如何根据路由在组件中呈现组件

20

如何使用react路由器根据路由呈现容器/组件?

12

根据路由呈现不同的组件

20

如何根据路由使用组件

12

响应,gatsbyjs:循环遍历对象组件不会被呈现。

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文