-
Notifications
You must be signed in to change notification settings - Fork 11
GitHub Flow Simulation app #39
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
✅ Deploy Preview for commit-mate-net ready!
To edit notification comments on pull requests, go to your Netlify site settings. |
/tutorial |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
vue3のバグ?
46行目〜
toRawをして参照を外すことには成功、値を変更してもやっぱり参照されてないので元のref()の方は変化なし。
なのに、全く別のref()の値へ、そのtoRawした値をpushした途端、toRawの効果が切れて元のようにまた参照し始める(pushした後、変更が連動している)
その証拠に、toRaw化してrefを外したオブジェクトのnameプロパティの冒頭にorigin/追加(追加した時点で何も変化なし)、そして別のref()の配列に、nameプロパティ: 'test'、commitsプロパティはそのtoRaw化した値を注入したオブジェクトをpushすると、pushされた方は正しく表示され、toRaw化してた方のrefの名前は'origin/'が追加されてた。そしてそのtoRaw化した方の元のrefのcommitsが変更するたび、pushしたさきのcommitsも連動し始めた
なにかしらやろうとしていることが違っている気がする 配列をコピーしたい感じ? |
↑の commit でソースコードの解説コメント追加しましたー! やりたいこと:現時点での、あるブランチの状況(オブジェクトである)(プロパティにはブランチ名、現時点でのコミットの数がある)をスナップショット(toRaw())して、その静的なオブジェクトデータをoriginの配列へarray.push()したい(コピペしたい) 問題:toRaw()したはずなのに、push()した途端、ref()に戻ってしまう→ local と origin のコミットの数が連動してしまう...。push()した後に再度、localでコミット2,3,4,5....とするとoriginのコミットも同じように2,3,4,5....と増えてしまう。 |
|
commit id たちが格納されている配列を、参照から解放するために、新たな箱を作ってforeachで入れ直したら、とりあえず解放されうまく行きました! |
おそらく、配列の参照問題なのかなって思いました。 // 引数なしで呼ぶと、同じ内容の新しい配列がシャローコピーされる
targetBranch.value.commits = snapBranch.value.commits.concat() ↑こんな感じ それから、同じ理由で配列の内容を加工したいなーって場合には もしくは、プリミティブな配列の使用をやめて 全然、検討違いなこと言ってたらすみません、、、 |
ちゃんとソースみました! @rie-oki-agn 配列やオブジェクトのコピーは基本的に下記のようにすると読みやすくなります。
たとえば次のようにすることで name を上書きするみたいなこともできますね
リポジトリ相当については、リモートとローカルで、配列もしくはオブジェクトは統一してよさそう 一旦できるところまで実装してくれたら、木曜日か土曜日にそれをもとに補足しますね |
const copiedArticles = [ ...articles ]
const copiedUsers = { ...user } ↑これ、スプレッド構文って言うんですね! ただ、スプレッド構文もシャローコピーっぽいので |
いちおう補足でシャローコピーとディープコピーについて JavaScript によるオブジェクトや配列のコピーは基本的にシャローコピー※で、中にオブジェクト(or配列)が入っていると、それはコピーされません
これを簡易的にディープコピーするとしたら
というようにする必要があります(他にも配列やオブジェクトがあればその分だけ必要で、配列の中にオブジェクトとかあったらそれらもすべて必要) このようにしておくと、user.followIDs に push しても copied.followIDs には影響がありません。 ※ ディープコピーをするならlodash等を使うのが一般的でですが、慣れるとディープコピー不要な設計が可能になります 注記 |
なんと!Vueのリアクティブ云々ではなくて、JavaScriptの参照の問題が絡んでいたのですね!! 調べているときにdeepという単語が出てきたのですが、そういうことだったのか....!! pushの段階では全然考えてなかったのですが、確かに 土曜日にレビューお願い致します! |
@rie-oki-agn @monsat |
この会話は #46 へ、作業は46-simulationへ移します |
GitHubフローのシミュレーションページ作成中。
netlifyプレビューのためのPRです。
開発の議論やアドバイス、このコマンドを追加してほしい!などありましたらコメントお願いします!!