[ Day 28 ] 实作一个 React.js 网站 4/5

https://ithelp.ithome.com.tw/upload/images/20211012/20134153vdxhQhDfpE.png
接续上一篇的 Layout 相关元件实作後,今天要来开发 React.js 网站的功能是表单设计的部分,因为我们希望能在网站中使用该表单新增新的 Meetup 。
那就一起继续看下去吧~


新增 Form 元件

  • 先在 meetups 资料夹内新增档案: NewMeetupForm.js 以及 NewMeetupForm.module.css ,并在 NewMeetupForm.module.css 中加入已经写好的范例预设样式。
    https://ithelp.ithome.com.tw/upload/images/20211012/201341531VqAAPjFrC.png

    https://ithelp.ithome.com.tw/upload/images/20211012/20134153v0iLiLgCHA.png

    https://ithelp.ithome.com.tw/upload/images/20211012/20134153VzTQCwknCK.png

  • NewMeetupForm.js 中引入 Card.js 样式元件和 NewMeetupForm.module.css 的 CSS Module ,并在返回的 JSX 中设定 <form> 标签以及要透过 props 传入的资料内容,最後在使用 preventDefault() 的方法来防止浏览器所有的预设行为。
    https://ithelp.ithome.com.tw/upload/images/20211012/2013415324uyMuZSXu.png

备注: <label> 标签中的 htmlFor 是在 JSX 中取代原本 <label> 标签的 for 属性。这部分功能说明提供文章的传送门给大家参考唷!

  • NewMeetup.js 的页面中引入刚才建立好的 NewMeetupForm.js 元件。
    https://ithelp.ithome.com.tw/upload/images/20211012/20134153faBx5ah2j4.png

这样我们就可以在 Add New Meetup 的页面看到如图所示的 Form 表单在其中:
https://ithelp.ithome.com.tw/upload/images/20211012/20134153KXQVN1uJKA.png


使用 React Hooks 中的 useRef

  • NewMeetupForm.js 元件中引入 React Hooks 中的 useRef() 来抓取特定 DOM ,宣告好 DOM 变数之後将需要绑定的标签使用 ref 属性来做指定变数的绑定。
    https://ithelp.ithome.com.tw/upload/images/20211012/20134153UZRD16Jnr6.png

    https://ithelp.ithome.com.tw/upload/images/20211012/20134153EFOafsVLJG.png

备注:关於 useRef 这个参数可以参考此文章,因为这系列的篇幅中并没有提到过此 React Hooks

  • submitHandler() 函式中将输入至 Form 表单中的值取出,并将其汇整成一个之後要上传新增的 Meetup 资料的一个物件。
    https://ithelp.ithome.com.tw/upload/images/20211012/20134153SJeuIzid1S.png

透过上面程序码中最下面一行的 console.log(meetupData) 来检视我们是否成功抓到 Form 中的所有栏位资料:

  1. 在画面中的 Form 内填写对应的资料,并点击下方的 Add Meetup 的按钮。
    https://ithelp.ithome.com.tw/upload/images/20211012/20134153O4S473OhWJ.png

  2. 打开开发者工具中的 Console 区块,检视是否有成功印出刚才输入的 Form 资料。
    https://ithelp.ithome.com.tw/upload/images/20211012/20134153oeHUtg8kOI.png


传送 POST Request

  • NewMeetupForm.js 元件中的 NewMeetupForm() Function 中原本用来检测用的 console.log 移除後,加入 props 属性并设定自定义资料名称,将 POST 请求所需要的资料传入到父层页面中。
    https://ithelp.ithome.com.tw/upload/images/20211012/20134153uJUYWwBSL0.png
  • NewMeetup.js 页面中新增一个 addMeetupHandle() 的 Function 并使用 fetch 来做非同步的 POST Request 传递新输入的 Meetup 资料。
    https://ithelp.ithome.com.tw/upload/images/20211013/20134153LMtgLRVrvn.png

备注:关於这边所使用的 API 是由 Firebase 所建立的,对於这部分的详细操作可以参考范例的影片教学内容。

虽然在 NewMeetup.js 页面上点击按钮 Add Meetup 之後画面不会有出现任何回馈(因为我们没有设定),不过去 Firebase 的资料库页面中我们就可以看到新增进资料库的 meetup 资料在里面了,如下图所示:
https://ithelp.ithome.com.tw/upload/images/20211013/20134153kZuMQoiqTI.png


今天这篇实作应用到了 [ Day 08 ] 元件的资料传递 - Props 传递我们新增的 Meetup 资料[ Day 14 ] 佳评如潮的 React Hooks 中没有介绍到的 useRef() (拿来抓取指定 DOM 的 Hooks )之外 ,还有前面实作中一直重复出现的 Function ComponentJSX 等的概念。
备注:差点忘记附上的今日 GitHub Repository 连结

明天就会是实作 React.js 网站的最後一篇了,会将网站中更多的细节还有使用者反馈的内容做最後的收尾罗!

如果有任何问题都非常非常欢迎提出和指教~
那我们下篇见ʘ‿ʘ


<<:  [Day28] 介绍 CRUD

>>:  [Day28]ISO 27001 附录 A.16 资讯安全事故管理

day8 : logging集中(中)

昨天成功地取得了vector agent搜集的metric和logger,在使用上因为metric算...

Day 24:让iOS也吃到SQL Delight

Keyword:SQLDelight,Native Driver 到24日,在iOS上呈现DB资料 ...

用React刻自己的投资Dashboard Day30 - 股票代号输入防呆机制

tags: 2021铁人赛 React 股票代号输入错误当机问题 Day28的文章有提到,当使用者想...

Day3. 从Example Code瞧瞧Matter.js的盘古开天

说好今天要来谈谈昨天的那段扣里,究竟写了些什麽。 为什麽可以像杰克一样神奇,产生出这样的画面呢? 我...

DAY26 - [React] 登入登出 router

今日文章目录 需求说明 过程纪录 参考文章 今天来练习Router切换页面。 需求说明 两个页面:...