Spread

Spread語法可用在函數、陣列及物件,當使用在物件時,就是將物件的內容複製。

所以,如果要複製exam物件的內容,可以利用「...」,這樣的作法是產生一個新物件,所以,原本exam物件內容的異動,不會影響examB。

let exam = { question: "氫", answer: "H" };
let examA = exam;
let examB = { **...exam** };
exam.answer = "h";
console.log(exam);
console.log(examA);
console.log(examB);

也可以複製時,順便增加新的屬性

let exam = { question: "氫", answer: "H" };
let examA = exam;
let examB = { ...exam**, options:["H", "Ha","Hi","Hq"]** };
exam.answer = "h";
console.log(exam);
console.log(examA);
console.log(examB);

屬性名稱

屬性的名稱也可以是個變數

let exam = { question: "氫", answer: "H" };
let examA = exam;
let v = "options";
let examB = { ...exam, **[v]**: ["H", "Ha", "Hi", "Hq"] };
exam.answer = "h";
console.log(exam);
console.log(examA);
console.log(examB);

這就是在Authetication使用到的語法

  const handleChange = function (event) {
    setAccount(**{ ...account, [event.target.name]: event.target.value }**);
  };