iT邦幫忙

2022 iThome 鐵人賽

0
自我挑戰組

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

[Day 68] [React] 改變不同部分組成的狀態 (Complex State)

  • 分享至 

  • xImage
  •  

Complex State 的 Complex,在這堂課中的意思是,我們可能需要拿到之前的 JavaScript objects 狀態的 objects 的值,比如 useState,以下是之前上課相關的筆記:

又或者是這堂課中的第一個練習,
輸入名字時,Hello 旁邊要顯示使用者輸入的文字:

https://ithelp.ithome.com.tw/upload/images/20221121/20151588MHNAN1clLl.png

在這邊我所使用的方法,就是上面 useState 筆記的內容,這邊也可以讓表格一開始就出現 useState 的初始值 Hey

import React, { useState } from "react";



function App() {

  const [original, newName]=useState("Hey");
  
  /*original為初始值Hey

  function nameOfUser(){
    newName(event.target.value)
  }

  return (
    <div className="container">
      <h1>Hello {original}</h1>
      <form>
        <input onChange={nameOfUser} name="fName" placeholder="First Name" value={original}/>
        
        /*這邊Value引用original就可以顯示初始值
        
        <input name="lName" placeholder="Last Name" />
        <button>Submit</button>
      </form>
    </div>
  );
}

export default App;

而姓氏欄位要做到一樣的效果,就是重複名字的作法,這樣就會有兩個 useState。不過 coding 就是要讓我們減少做重複的事情,這時更複雜的 state 就來了~

我們可以在 useState 裡面裝一個 object,而不是一個 value:

  const [fullName, setFullName] = useState({
    fName: "",
    lName: ""
  });

而 handleChange function 也要是 return 之前的 value,不然就不會出現之前的值:

  function handleChange(event) {
    const { value, name } = event.target;
    
    /*以上所使用的方法是object destructuring

    setFullName(prevValue => {
      if (name === "fName") {
        return {
          fName: value,
          lName: prevValue.lName   /*上次的Value
          
        };
      } else if (name === "lName") {
        return {
          fName: prevValue.fName,   /*上次的Value
          lname: value
        };
      }
    });
  }

今天課有點複雜,想了很久QQ 下次的課程就會是今天課程內容的挑戰~


上一篇
[Day 67] [React] Class components 和 Functional components 的比較
下一篇
[Day 69] [React] 改變不同部分組成的狀態 (Complex State) - 練習
系列文
30 天線上自學前端72
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言