复制Airbnb,添加侧边栏

111 阅读1分钟

这篇文章是一个新系列的一部分,我们用Next.js建立一个克隆的Airbnb。请看第一篇文章

在这里,我想做的第一件事是为单个房屋页面添加一个侧边栏,这就是我们要添加的日期选择器。

这里是Airbnb。

这是我们现在的页面。

我想在我们的页面上添加一个小的侧边栏,以容纳日历。

我们要做的第一件事是标记。

现在,这是我们的pages/houses/[id].js 内容。

pages/houses/[id].js

export default function House(props) {
  return (
    <Layout
      content={
        <div>
          <Head>
            <title>{props.house.title}</title>
          </Head>
          <img src={props.house.picture} width="100%" alt="House picture" />
          <p>
            {props.house.type} - {props.house.town}
          </p>
          <p>{props.house.title}</p>
        </div>
      }
    />
  )
}

我想用一个article 标签包住所有这些内容,并在<div> 容器的末尾添加一个aside 标签(我也要给它分配一个container 类别)。

pages/houses/[id].js

export default function House(props) {
  return (
    <Layout
      content={
        <div className="container">
          <Head>
            <title>{props.house.title}</title>
          </Head>
          <article>
            <img src={props.house.picture} width="100%" alt="House picture" />
            <p>
              {props.house.type} - {props.house.town}
            </p>
            <p>{props.house.title}</p>
          </article>
          <aside></aside>
        </div>
      }
    />
  )
}

旁白标签通常用于添加一段与主要内容相关的内容。在我们的例子中,它是完美的。

让我们添加一些CSS,使页面的主要部分和旁白像Airbnb页面那样对齐。

<style jsx>{`
  .container {
    display: grid;
    grid-template-columns: 60% 40%;
    grid-gap: 30px;
  }

  aside {
    border: 1px solid #ccc;
    padding: 20px;
  }
`}</style>

这里是pages/houses/[id].js ,现在的完整代码。

pages/houses/[id].js

import Head from 'next/head'
import houses from '../../houses.js'
import Layout from '../../components/Layout'

export default function House(props) {
  return (
    <Layout
      content={
        <div className="container">
          <Head>
            <title>{props.house.title}</title>
          </Head>
          <article>
            <img src={props.house.picture} width="100%" alt="House picture" />
            <p>
              {props.house.type} - {props.house.town}
            </p>
            <p>{props.house.title}</p>
          </article>
          <aside></aside>

          <style jsx>{`
            .container {
              display: grid;
              grid-template-columns: 60% 40%;
              grid-gap: 30px;
            }

            aside {
              border: 1px solid #ccc;
              padding: 20px;
            }
          `}</style>
        </div>
      }
    />
  )
}

export async function getServerSideProps({ query }) {
  const { id } = query

  return {
    props: {
      house: houses.filter((house) => house.id === parseInt(id))[0]
    }
  }
}

这就是我们的结果。

查看GitHub上的代码

下一部分。添加 react-day-picker