向React / Gatsby组件添加ID以进行哈希链接

时间:2018-10-28 12:20:31

标签: reactjs anchor router gatsby

我在导航栏中有一个链接,可将我带到索引页上的锚点。目前,我不知道如何在组件上添加ID,因此必须将组件包装在div中并为其指定ID,以使其正常工作。理想情况下,我想简单地将锚点放置在组件本身上。

这对我来说很好,但是我想知道这是使用React / Gatsby做锚的方法还是有更好的方法?

//Navbar, which is part of Layout
export default class NavBar extends Component {
  render() {
    return (
      <NavContainer>
        <Menu>
          <ul>
            <li>Home</li>
            <li>About</li>
            <li>Events</li>
            <li>Blog</li>
            <li>Mentorship</li>
            <li>
              <Link to="/#join-us">Join Us</Link>
            </li>
          </ul>
        </Menu>
      </NavContainer>
    )
  }
}

//Homepage
const IndexPage = ({ data, location }) => {
  const { site, events, about, features, blogs } = data
  const eventsEdges = events.edges
  return (
    <Layout>
      <div id="join-us">
        <JoinUs /> //Can't do <JoinUs id="join-us"/>
      </div>
      <BlogList blogs={blogs} fromIndex={true} />
    </Layout>
  )
}

1 个答案:

答案 0 :(得分:1)

您必须将id作为props传递到JoinUs组件。
首先,执行<JoinUs id="join-us" />。现在,id是组件的道具。

JoinUs组件

const JoinUs = ({ id }) => (
    <div id={id}>
        ...Your component stuff
    </div>
);

其他方法

import React from 'react'

class JoinUs extends React.Component {

    constructor(props) {
        super(props);
    }

    render() {
        return (
            <div id={this.props.id}>
                ... Your component stuff
            </div>
        );
    }
}

export default JoinUs

这两种方法相似,但第一种更为简洁。 JoinUs = ({ id }) ...行允许您访问和破坏道具。您从id获得财产props。现在,您无需使用锚点将组件包装在div

更多信息在这里:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment