[ Home ]
back

htmx + Vite + d1, CMS 作る。

id: 57, 2024-08-08

概要:

  • 前scrapsの続編で、 htmx + Viteの関連メモとなります。
  • CMS表示系、ブログ的なアプリです。
  • ほぼSSR構成です。
  • 検索部分で、htmx POST通信等の実装を追加。
  • テストは、vercelデプロイする例です。
  • テストDBは、D1で。CF-pages設置のheadless CMS連携します

[ 作成日: 2024/07/07 ]


環境

  • htmx
  • Vite
  • express
  • react-dom

作成したコード

https://github.com/kuc-arc-f/express_47htmx/tree/main/sample/blog

  • .env
  • API,API_KEY接続, サイトID等を設定
VITE_SITE_ID=1
VITE_API_URL=http://localhost
VITE_API_KEY="123"

  • タイトル検索

https://github.com/kuc-arc-f/express_47htmx/blob/main/sample/blog/src/pages/posts/PostIndex.tsx

  • hx-post: POST通信, 内部API エンドポイント指定
  • hx-target: レスポンスを、レンダリング
  <form
  hx-post="/api/post/search_elem"
  hx-trigger="submit"
  hx-target="#search_result"
  hx-on="htmx:beforeRequest: Top.hiddenListArea()
  htmx:afterRequest: console.log("#afterRequest")"        
  >
    <input type="text" 
    className="mx-2 border border-gray-400 rounded-md px-3 py-2 focus:outline-none focus:border-blue-500" 
    name="seachKey" id="seachKey"
    placeholder="Title search" />
    <input type="text" name="api_url" className="d-none" defaultValue="/api/posts/search"/>
    <button type="submit"
    className="ms-2 bg-transparent hover:bg-purple-500 text-purple-700 font-semibold hover:text-white py-2 px-4 border border-purple-500 hover:border-transparent rounded" 
    id="btn_search"
    >Search</button>
  </form>

  • 検索結果component
  • /api/post/search_elem から、呼ばれるcomponent

https://github.com/kuc-arc-f/express_47htmx/blob/main/sample/blog/src/pages/posts/SearchResulte.tsx


  • API : /api/post/search_elem
  • sample/blog/src/routes/apiPost.ts

https://github.com/kuc-arc-f/express_47htmx/blob/main/sample/blog/src/routes/apiPost.ts


GIF

https://x.com/kuc_arc_f/status/1809752439580684534