【问题标题】:Using React Burger Menu with GatsbyJs在 GatsbyJs 中使用 React Burger Menu
【发布时间】:2019-03-02 13:39:02
【问题描述】:

我正在尝试导入组件以将其与 GatsbyJs 一起使用并使其工作到一定程度,但除幻灯片之外的其他“效果”不起作用并且没有错误消息,我也在使用Styled Components.

这是我的代码,老实说,我不知道这是 React-burge-menu 还是 GatsbyJs 的问题。

首先是组件,我必须将它包装在一个样式化的 div 上才能工作as mention here

sidebar.js

import React from 'react'
import { scaleDown as BurgerMenu } from 'react-burger-menu'
import styled from 'styled-components'
import { Link } from 'gatsby'
import MenuLogo from '../assets/logos/letterlogo.png'

const StyledBurgerMenu = styled.div`
.bm-item {
    text-align:center;  
    display: inline-block;
    text-decoration: none;
    margin-bottom: 5vh;
    color: #d1d1d1;
    transition: color 0.2s;
}
.bm-item:hover {
    color: white;
}
.bm-burger-button {
    position: fixed;
    width: 30px;
    height: 15px;
    right: 2vw;
    top: 2vh;
}
.bm-burger-bars {
    background: #373a47;
}
.bm-cross-button {
    height: 30px;
    width: 15px;
}
.bm-cross {
    background: #bdc3c7;
}
.bm-menu {
    background: rgba(0, 0, 0, 0.3);
    padding: 2.5em 1.5em 0;
    font-size: 2em;
}
.bm-morph-shape {
    fill: #373a47;
}
.bm-item-list {
    color: #b8b7ad;
}

.bm-overlay {
    background: rgba(0, 0, 0, 0.3);
}
`

const Logo = styled.img`
width: 30vw;
display: block;
margin: auto;
`

export default () => (
  <StyledBurgerMenu>
    <BurgerMenu width='50%'>
      <Logo src={MenuLogo} />
      <Link to='/'>Testing</Link>
      <Link to='/'>Testing</Link>
      <Link to='/'>Testing</Link>
      <Link to='/'>Testing</Link>
    </BurgerMenu>
  </StyledBurgerMenu>
)

然后我将其调用到布局中,这里我创建了 outer-containerpage-wrap

layout.js

import React from 'react'
import "normalize.css"
import styled from "styled-components"
import SideBar from "./sidebar"

const MainWrap = styled.div`
    height: 100vh;
    overflow: auto;
`;
const PageWrap = styled.div`
    text-align: center;
    overflow: auto;
    height: 100vh;
`;

export default ({children}) => (
  <MainWrap>
    <SideBar pageWrapId={"PageWrap"} outerContainerId={"MainWrap"}/>
    <PageWrap>
      {children}
    </PageWrap>
  </MainWrap>
)

也试过直接加id:

export default ({children}) => (
  <MainWrap id={"outer-container"}>
    <SideBar pageWrapId={"page-wrap"} outerContainerId={"outer-container"}/>
    <PageWrap id={"page-wrap"}>
      {children}
    </PageWrap>
  </MainWrap>
)

这两种方式都有效,但只有幻灯片动画,我也将该布局调用到具有此代码的索引文件:

index.js

import React from 'react'
import Layout from '../components/layout'
import { StaticQuery, graphql } from 'gatsby'
import styled from 'styled-components'
import { FaFacebook, FaInstagram, FaYoutubeSquare, FaTwitterSquare } from 'react-icons/fa'

const Hero = styled.div`
    margin-top: 20vh;
    `
const SocialLinks = styled.div`
    margin-top: 5vh;
    a{
        display: inline-block;
        margin: 1vw;
    }
`;
export default () => (
  <StaticQuery
    query={graphql`
      query HeadingQuery {
        site {
          siteMetadata {
            title
            description
            fb
            twitter
            youtube
            instagram
          }
        }
      }
    `}
    render={data => (
      <Layout>
        <Hero>
          <h1>{data.site.siteMetadata.title}</h1>
          <h2>{data.site.siteMetadata.description}</h2>
        </Hero>
        <SocialLinks>
            <a target="_blank" rel="noopener noreferrer" href={data.site.siteMetadata.fb}><FaFacebook size={50} color="black"/></a>
            <a target="_blank" rel="noopener noreferrer" href={data.site.siteMetadata.youtube}><FaYoutubeSquare size={50} color="black"/></a>
            <a target="_blank" rel="noopener noreferrer" href={data.site.siteMetadata.twitter}><FaTwitterSquare size={50} color="black"/></a>
            <a target="_blank" rel="noopener noreferrer" href={data.site.siteMetadata.instagram}><FaInstagram size={50} color="black"/></a>
        </SocialLinks>
      </Layout>
        )}
    />
)

这是一个使用该代码构建的实时示例,您会看到它可以工作,但不会按比例缩小。 Demo

希望你能给我指明正确的方向。

提前致谢

【问题讨论】:

    标签: javascript reactjs styled-components gatsby


    【解决方案1】:

    重提一个 2 年前的问题...

    您正在将pageWrapIdouterContainerId 传递到您的SideBar 组件中。您需要将它们作为 props 并将它们传递给 BurgerMenu 组件。

    Github Docs

    sidebar.js

    export default ({pageWrapId, outerContainerId}) => (
      <StyledBurgerMenu>
        <BurgerMenu pageWrapId={pageWrapId} outerContainerId={outerContainerId} width='50%'>
          <Logo src={MenuLogo} />
          <Link to='/'>Testing</Link>
          <Link to='/'>Testing</Link>
          <Link to='/'>Testing</Link>
          <Link to='/'>Testing</Link>
        </BurgerMenu>
      </StyledBurgerMenu>
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-04
      • 1970-01-01
      • 1970-01-01
      • 2020-07-10
      • 2021-12-09
      • 2018-12-17
      • 2021-02-02
      相关资源
      最近更新 更多