Closed1
preact.js + hono + workers + D1 で、何か作る
概要
前の、フロント preact.js + htm のCDN版を、hono + D1の組み合わせを作成内容です
環境
- preact
- htm
- hono
- cloudflare D1
- cloudflare workers
作成したコード
- SSR側: src/views/preact2/App.tsx
- preactは、親レイアウトで読み込む形です
App.tsx
return (
<Layout title="Test_index">
<div>
<h1 class="text-4xl font-bold">Welcome , Preact2 </h1>
<hr class="my-2" />
<div id="root"></div>
</div>
{/* JS */}
{html`<script src="/js/preact2/index.js?${timeStamp}"></script>`}
</Layout>
)
- preact実装、内部APIから、D1データのjsonレスポンスを読込
- preactで、レンダリング
- public/js/preact2/index.js
index.js
console.log("#preact2.index.js");
const html = htm.bind(preact.h);
const elem = document.getElementById("root");
//
const PageIndex = {
/**
*
* @param
*
* @return
*/
get_list : async function()
{
try{
let ret = [];
const item = {
api_key: "",
}
const body = JSON.stringify(item);
const res = await fetch("/api/tasks/get_list", {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: body
});
const json = await res.json()
//console.log(json);
if (res.status !== 200) {
console.error("error, status <> 200");
throw new Error(await res.text());
}
if (json.ret !== "OK") {
console.error("Error, json.ret <> OK");
throw new Error("Error, json.ret <> OK");
}
ret = json.data;
return ret;
} catch (e) {
console.error("Error, get_list");
console.error(e);
throw new Error('Error , get_list');
}
},
/**
*
* @param
*
* @return
*/
displayProc: function(items){
try {
//console.log("#init=", new Date().toString());
const li = [];
items.forEach((element) => {
let ht = html`
<div>
<h3 class="text-3xl font-bold">${element.title}</h3>
<p>ID: ${element.id}, ${element.createdAt}</p>
<hr class="my-2" />
</div>
`;
li.push(ht);
});
preact.render(li, elem);
} catch (e) {
console.error("Error, displayProc");
console.error(e);
}
},
/**
*
* @param
*
* @return
*/
initProc: async function() {
try {
console.log("#init=", new Date().toString());
const items = await this.get_list();
console.log(items);
this.displayProc(items);
} catch (e) {
console.error("Error, get_list");
console.error(e);
}
},
}
PageIndex.initProc();
このスクラップは2023/10/18にクローズされました