前提・実現したいこと
https://ja.reactjs.org/tutorial/tutorial.html#lifting-state-up-again
React公式チュートリアルのチュートリアルで、classコンポーネントで実装されているところを関数コンポーネントで書き換えてみたところuseStateの挙動で理解できないところがあったので質問させていただきます。
該当のソースコード
javascript
1import React, { useState } from 'react' 2 3const Test = () => { 4 const [history, setHistory] = useState([Array(9).fill(null)]) 5 const [current, setCurrent] = useState(history[history.length - 1]) 6 7 const handleClick = () => { 8 const copySquares = current.slice() 9 const set = history.concat([copySquares]) 10 setHistory(history.concat([copySquares])) 11 setCurrent(history[history.length - 1]) 12 13 console.log(set) 14 console.log(history) 15 } 16 17 return ( 18 <button 19 style={{ height: '30px', width: '50px' }} 20 onClick={() => { 21 handleClick() 22 }} 23 ></button> 24 ) 25}
console
1//クリック1回目 2[Array(9), Array(9)] //console.log(set) 3[Array(9)] //console.log(history) 4 5//クリック2回目 6[Array(9), Array(9), Array(9)] //console.log(set) 7[Array(9), Array(9)] //console.log(history) 8 9//
発生している問題・エラーメッセージ
上記のコードで、console.log(set) と console.log(history) の結果が違うのはなぜでしょうか?
set に代入されている値と同じ値をhistoryにセットしているので同じ結果になると予想していたのですが…
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/08/24 04:29