React Router
// article/delete.js
// Only a single action per file 😕
export async function action({ request }) {
const { article_id } = await request.json()
await db.article.delete({ article_id })
return Response.json({ success: true })
}// Article.jsx
export default function Article() {
const onClick = async () => {
// Lots of boilerplate 😕
const res = await fetch("/article/delete", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ article_id })
})
const { success } = await res.json()
if (!success) alert("Deletion failed")
}
return <button onClick={onClick}>Delete</button>
}Vike + Telefunc
// Article.telefunc.js
export async function onArticleDelete({ article_id }) {
await db.article.delete({ article_id })
return { success: true }
}// Article.jsx
import { onArticleDelete } from './article.telefunc.js'
export default function Article() {
const onClick = async () => {
const { success } = await onArticleDelete({ article_id })
if (!success) alert("Deletion failed")
}
return <button onClick={onClick}>Delete</button>
}