質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

1737閲覧

React Hooks state 配列に追加できない

bbTeratail

総合スコア2

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/07/04 09:05

お世話になります。
初めて投稿いたします。
Reactは初心者になります。

ここですでに類似したケースをいくつか拝見いたしましたが
依然として解決出来ていません。
(理解できていないため活用出来ていない為かと)

stateでない配列は問題なく処理出来ているんですが、
何故か以下pathPush呼び出してもstateのpathCoordsは
配列要素追加できません。
数か月格闘していますが他の試行含め更新されるのを一度も見ていません。

(※)の書式が怪しいのでご教授お願い致します。
抜粋ですが
よろしくお願い致します。
(react 17.0.2)

const [pathCoords, setpathCoords] = useState([
{
lat: 35.6809591, //①
lng: 139.7673068 //①
}
]);

const pathPush = () => {

const lat1 = (任意数字②); const lng1 = (任意数字②); let pathTmp = []; pathTmp.push({lat:lat1,lng:lng1}); //alert(JSON.stringify(pathTmp[0])); //値②が確認できました setpathCoords([...pathCoords, pathTmp]); //(※)書式は見様見真似です alert(pathCoords.length); //値が1のまま alert(JSON.stringift(pathCoords[0])); //①が確認できます alert(JSON.stringify(pathCoords[1])); //当然確認できません

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

useStateの戻り値二番目の関数は実行後に即座にはステートの値を変更しません
一連の処理が終わった後に行う変更の予約をしてる感じです

その場その場でいちいちステートの値を変更してると
都度何度も再レンダリングをすることになってしまいますからね

もし、その配列の変更それ自体ではなく
その配列を利用して生成された値によってこそステートを更新したいという場合は
useRefを使うと良いかと思います

あと

jsx

1console.log([...pathCoords, pathTmp]);

してみて意図通りの形なの確認してみましょう
多分意図通りではない気がします

jsx

1console.log([...pathCoords, ...pathTmp]);

ではないでしょうか

投稿2021/07/05 03:04

KazuhiroHatano

総合スコア7804

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bbTeratail

2021/07/05 12:41

ご回答ありがとうございます。 嬉しいです。 で、 stateの挙動自体まだまだあやふやで、ご指摘の動きも初耳でした・・・ 以後、精進して勉強します。 useRefも今確認中です。 ご指摘のコンソールログの書式はこちらも初耳でした。 確かに出力しません。 とりあえず引き続き調べてみます。 一旦、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問