iT邦幫忙

2022 iThome 鐵人賽

0
自我挑戰組

30 天線上自學前端系列 第 69

[Day 69] [React] 改變不同部分組成的狀態 (Complex State) - 練習

  • 分享至 

  • xImage
  •  

昨天的課程 [Day 68] [React] 改變不同部分組成的狀態 (Complex State) 說明了複雜狀態如何傳遞資料,今天延續昨日內容的練習。

//CHALLENGE: Make the code in App.jsx work.
//The final app should have a single contact
//with fName, lName and email.

//HINT: You'll need to apply the following things you learnt:
//1. Using JS Objects with state.
//2. Making use of previous state when changing state.
//3. Working with forms in React.
//4. Handing events

https://ithelp.ithome.com.tw/upload/images/20221122/201515882RBnSZ8Ve0.png

完成的樣子應該要是以下畫面:

https://ithelp.ithome.com.tw/upload/images/20221122/20151588BJna5aWLuI.png

以及:

  • 名字和姓氏邊打出來,邊要顯示在 Hello 後面
  • email 顯示在 <p> 裡面

<input> 裡面加上 onChange

我的第一步是從最後的欄位結果開始:

        <input onChange={handleChange} name="fName" placeholder="First Name" />
        <input onChange={handleChange} name="lName" placeholder="Last Name" />
        <input onChange={handleChange} name="email" placeholder="Email" />

加上 onChange 之後,再回頭想 handleChange function。

handleChange function

先寫好遇到 fName,lName,email 要做的事:

  function handleChange(event){
    const {value, name}=event.target;

    setContact((preValue)=>{

      if (name === "fName"){

      }else if (name === "lName"){

      }else if (name === "email"){
        
      }
    })
  }

接著再詳細寫好要 return 的內容:

  function handleChange(event){
    const {value, name}=event.target;

    setContact((preValue)=>{

      if (name === "fName"){

        return {
          fName: value,
          lName: preValue.lName,
          email: preValue.email
        };

      }else if (name === "lName"){

        return {
          fName: preValue.fName,
          lName: value,
          email: preValue.email
        };

      }else if (name === "email"){

        return {
          fName: preValue.fName,
          lName: preValue.lName,
          email: value
        };
        
      }
    })
  }

https://ithelp.ithome.com.tw/upload/images/20221122/201515882a7VbaOnTL.png

OK DONE! 以上是最後完成的截圖~


上一篇
[Day 68] [React] 改變不同部分組成的狀態 (Complex State)
下一篇
[Day 70] [React] JavaScript ES6 Spread Operator (展開運算符)
系列文
30 天線上自學前端72
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言