NextWeb.js

NextWeb.js

  • Docs
  • GitHub

›Page

Getting Started

  • Getting Started
  • Folder Structure
  • Create a New Page
  • Navigate Between Pages

App

  • Environment Variables
  • Module Alias
  • Routing
  • Context
  • Store
  • Authentication

Page

  • Layout
  • Meta
  • Breadcrumb
  • Stats
  • Restricted Pages

Data Fetching

  • Repositories & Services
  • Server-Side Fetching
  • Client-Side Fetching
  • Error Handling
  • Custom Error

Styling

  • Local Styles
  • Global Styles
  • Grids
  • Style Helpers
  • Fonts
  • Icons

Deployment

  • Deployment

Layout

Each page in an application may have some common header, footer or navigation. That's why NextWeb.js prepare a simple layout system for you.

Just define the layout component here:

// src/components/_layouts/main/index.js

import Navigation from './Navigation'

function MainLayout({ children }) {
  return (
    <div>
      <Navigation />
      <main>{children}</main>
    </div>
  )
}

In this case, we add <Navigation /> besides the children which refers to the rendered page.

Disable Layout

However, some pages may not need a layout. The solution is easy, just set the layout option for withPage() to false.

// src/components/mypage/index.js

import React from 'react'
import withPage from '@lib/page/withPage'

function MyPage() {
  return <div>My Page</div>
}

export default withPage({ layout: false })(MyPage)

Multiple Layout

If your app is more complex or a single layout is not enough, you can add alternative layouts.

src/
  components/
    _layouts/
      main/
        index.js    // Main layout
      custom-1/
        index.js    // Custom layout 1
      custom-2/
        index.js    // Custom layout 2

And you have to edit withLayout.js:

// src/lib/page/withLayout.js

import MainLayout from '@components/_layouts/main'
import CustomLayout1 from '@components/_layouts/custom-1'
import CustomLayout2 from '@components/_layouts/custom-2'

export default (hasLayout = 'main') => PageComponent => {
  function EnhancedPageComponent(props) {
    if (!hasLayout) {
      return <PageComponent {...props} />
    }

    if (hasLayout === 'custom-1') {
      <CustomLayout1>
        <PageComponent {...props} />
      </CustomLayout1>
    }

    if (hasLayout === 'custom-2') {
      <CustomLayout2>
        <PageComponent {...props} />
      </CustomLayout2>
    }

    return (
      <MainLayout>
        <PageComponent {...props} />
      </MainLayout>
    )
  }

  ...

  return EnhancedPageComponent
}

Now choosing a layout is super easy:

// src/components/mypage/index.js

import React from 'react'
import withPage from '@lib/page/withPage'

function MyPage() {
  return <div>My Page</div>
}

export default withPage({ layout: 'custom-2' })(MyPage)
← AuthenticationMeta →
  • Disable Layout
  • Multiple Layout