Next.js项目实践(五)– 删除问题

本文实现问题删除功能。


添加删除按钮

与EditIssueButton类似,创建DeleteIssueButton。Delete按钮选择红色。

在IssueDetailPage上添加DeleteIssueButton,两个按钮水平排列,使用Flex 组件并添加 direction=”column”,间隔gap=”3″。

在平板以上宽度,左右侧显示,左侧详细页面宽一点占用4/5(md:col-span-4),右侧按钮占用1/5,Radix UI的sm等于Tailwind的md,稍有点让人混乱。

IssueDetail组件中使用了Card组件,属性prose为了可见性限制了每行宽度显示65字符,添加max-w-full表示利用全部宽度。

最后,在layout.tsx的main添加container组件,以便居中显示。

页面效果。

提交Git,命名:Add a delete button.


添加确认对话框

查看Radix-UI说明,可以很方便实现。

https://www.radix-ui.com/themes/docs/components/alert-dialog

复制代码到DeleteIssueButton,并修改相应显示信息。

查看网页。

提交Git,命名:Show a confirmation dialog box.


构建 API

很简单。

提交Git,命名:Building an API for deleting issues.


删除问题

给Action按钮添加onClick属性。发送delete方法,并转到 /issues 。为了立即生效,我们使用router.refresh();

提交Git,命名:Delete an issue.


处理错误

可能的错误要有预期,用try…catch获取。创建一个State指示是否有错,有错的话显示对话框提示。

目前代码稍有点长了,我们将onClick移到外面。

错误提示框如图。

提交Git,命名:Handle errors.


改善用户体验

为提升用户体验,删除操作需要做两件事情:一是进行删除时禁用删除按钮避免多次按;二是添加一个Spinner提示用户正在删除。

非常简单。添加状态isDeleting,根据状态禁用按钮及显示Spinner。

在DELETE方法添加延时模拟查看效果。

提交Git,命名:Improve the user experience.


小结

本文实现了问题删除功能。

下一篇实现用户验证。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注