hono icon indicating copy to clipboard operation
hono copied to clipboard

[PoC]: SPA option for JSX Renderer

Open yusukebe opened this issue 2 years ago • 1 comments

This is just a PoC. There are many issues in making this a reality, but I think this is an interesting idea.

Usage

import { Hono } from '../../src'
import { jsxRenderer } from '../../src/middleware/jsx-renderer'

const app = new Hono()

app.get(
  '*',
  jsxRenderer(
    ({ children }) => {
      return (
        <html>
          <body>
            <header>
              <a href='/'>Top</a>
              &nbsp;<a href='/about'>About</a>
              &nbsp;<a href='/posts/1'>Post 1</a>
            </header>
            {children}
          </body>
        </html>
      )
    },
    {
      spa: true,
    }
  )
)

app.get('/', (c) => {
  return c.render(
    <div>
      <h1>Top</h1>
      <p>{dummyText1}</p>
    </div>
  )
})

app.get('/about', (c) => {
  return c.render(
    <div>
      <h1>About</h1>
      <p>{dummyText2}</p>
    </div>
  )
})

app.get('/posts/:id', (c) => {
  return c.render(
    <div>
      <h1>Post {c.req.param('id')}</h1>
      <p>{dummyText3}</p>
    </div>
  )
})

Demo page

Screen cast

https://github.com/honojs/hono/assets/10682/b51ab2bc-55de-4aff-8777-720fb05617c5

yusukebe avatar Jan 11 '24 15:01 yusukebe

htmx alike

fujohnwang avatar Jan 12 '24 11:01 fujohnwang