Skip to content
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

reports.vueをreactのReports.jsxに書き換えた #6236

Merged
merged 14 commits into from
Feb 18, 2023

Conversation

lef237
Copy link
Contributor

@lef237 lef237 commented Feb 16, 2023

Issue

概要

reports.vueが使われていた箇所を、Reports.jsxに書き換えました。

また、それに伴い依存関係にあるファイルを修正しました。

変更確認方法

  1. feature/reports-vue-to-reactをローカルに取り込む
  2. rails db:resetをする
  3. bin/setupをおこなう
  4. rails sで起動して、komagataさんでログインする
  5. 以下のリンク先を順番に確認する(日報一覧が表示されていることを確認する)
  1. 以上で動作確認は終了です。

Screenshot

見た目の変化はありません。

上記のリンク先をそれぞれ確認していただければ大丈夫です!

Copy link
Contributor Author

@lef237 lef237 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

コードを読み解く際のメモとして、セルフレビューを致しました。
📝←この絵文字で始まるコメントが、セルフレビューになっております。

assert_text '今日は頑張りました'
end
assert_selector 'img[alt="happy"]'
assert_text '今日は頑張りました'
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝CSSの構造が変わったためテストを書き換えました

{unchecked
? <><i className="fa-regular fa-smile" /><p className="o-empty-message__text">未チェックの日報はありません</p></>
: <><i className="fa-regular fa-sad-tear" /><p className="o-empty-message__text">'日報はまだありません。'</p></>
}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝uncheckedの有無によって文面が変わるように致しました

/>
<NoReports />
<div>
{practices && (
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝practicesが存在するときは、このカッコ内の処理をおこなうようになっています

? `/api/reports.json?page=${page}&company_id=${companyId}`
: all === true
? `/api/reports.json?page=${page}&practice_id=${userPracticeId}`
: console.log('data_fetched!'),
Copy link
Contributor Author

@lef237 lef237 Feb 16, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝Reactへ渡される引数によって、fetch先を変えています。

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

複数の条件に合う引数が渡されることはありますか?
引数の内容がuserId !== '' all === true の場合に、後ろに書いてあるall === true の処理が実行されないことを懸念しています。
処理実行の優先度など含め問題なさそうであればOKです!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

複数の条件に合う引数が渡されることはありますか?

複数の条件に合う引数が渡されることはありません。

slimを見て頂けると分かりやすいと思うのですが、例えば「全ての日報のデータをfetchしたい場合」と、「個人の日報のデータをfetchしてくる場合」で渡す引数が違うからです。
(fetch部分に関しては、どれか1つだけ引数を選ぶ形になっています)

優先度も考えて三項演算子で処理致しました! なので、問題ないと思います。

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

複数の条件に合う引数が渡されることはありません。
優先度も考えて三項演算子で処理致しました!

ありがとうございます!
いただいた内容で懸念点解消されました! 🙌

const per = 20
const neighbours = 4
const defaultPage = parseInt(queryString.parse(location.search).page) || 1
const [page, setPage] = useState(defaultPage)
const [practiceId, setPracticeId] = useState('')
const [userPracticeId, setUserPracticeId] = useState('')
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝プラクティスそのものの日報一覧と、特定のユーザー日報一覧で表示形式が違うため、処理が異なります。そのため、変数名が被らないように書き換えています。

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

practiceId, setPracticeIdを削除する必要はあるのでしょうか?
単に変数名を被らないようにするためであれば、削除は不要かと思います!
(元の変数名が適切ではなかったとかですかね...?)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(元の変数名が適切ではなかったとかですかね...?)

理由としては、これに近いです。
正確には、元の変数名だと不具合が生じるため、変数名を変更する必要がありました。

11行目でpracticeIdという変数名を使っています。これは、本来のvueのファイルに準拠した名前です。

これと同じ変数名が、こちらで最近追加されたPull Requestで使われてしまっていました。

そのため、もしこの16行目がpracticeId, setPracticeIdのままになっていると、 #6044 のPull Requestで実装した処理が動かなくなってしまいます。

(そのままの状態だと、11行目の変数定義と16行目の変数定義がバッティングして、エラーが出てReactが表示されなくなってしまいます💧)

削除をしているわけではなく、変数名を変更してかぶらないようにすることで、既存の処理を壊すことなく実装することができます。

なので、practiceIduserPracticeIdへと変更したのは、削除したわけではなく、

  • 既存の処理を壊さずに新しい処理を追加するため
  • 元の変数名が間違っていたため

という2つの理由からおこなっているものです。

この変更に伴い、この直下の22行目や23行目など、影響範囲のあるところも修正しております。

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

そのため、もしこの16行目がpracticeId, setPracticeIdのままになっていると、#6044 のPull Requestで実装した処理が動かなくなってしまいます。
削除をしているわけではなく、変数名を変更してかぶらないようにすることで、既存の処理を壊すことなく実装することができます。

なるほどです!
既存処理への影響を懸念していたのですが、こちらで問題なさそうです。😊

</span>
</a>
</div>
{displayUserIcon && (
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝displayUserIconがある場合のみ、カッコ内の処理が行われます。

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

この部分を別コンポーネントにするとわかりやすいかな〜と思いました。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

別コンポーネントを作成致しました!
差分はこちらになります。→ 34062a1

@lef237 lef237 requested review from futa4095 and mono-nobe and removed request for futa4095 February 16, 2023 07:29
@lef237 lef237 self-assigned this Feb 16, 2023
@lef237 lef237 changed the title Feature/reports vue to react reports.vueをreactに書き換えた Feb 16, 2023
@lef237 lef237 changed the title reports.vueをreactに書き換えた reports.vueをreactのReports.jsxに書き換えた Feb 16, 2023
@lef237 lef237 marked this pull request as ready for review February 16, 2023 09:13
@lef237
Copy link
Contributor Author

lef237 commented Feb 16, 2023

@mono-nobe
お疲れ様です! こちらレビューをお願いしてもよろしいでしょうか?
(ご多忙の際は、遠慮なく言って頂いて大丈夫です!)

Comment on lines -10 to +11
export default function Reports({ user, currentUser, practices }) {
export default function Reports({ all = false, userId = '', practices = false, unchecked = false, displayUserIcon = true, companyId = '', practiceId = '' }) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

変数の増加が気になります 👀
オブジェクトでまとめて扱うなどは難しそうですか?
よろしければ変数が増えている背景を教えていただきたいです!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

おそらくmono-nobeさんが仰っていることは、

export default function Reports (props) {
  // 中の処理
}

このようにpropsのようなオブジェクトにまとめて、後で取り出したほうがスッキリする、ということですよね?👀
自分も以前はそう思っていたのですが、最近では事情が異なっていることを最近知りました。

https://discord.com/channels/715806612824260640/959777673612251146/1070993776899784704

AntiSatoriさんにこちらのDiscordで教えていただいたのですが、今のReactでは

  • デフォルト引数を使う
  • 分割代入を使う

ことが推奨されているようです!

そのため、ちょっとコードが長くなっていますが、このような形でコードを書きました。

※引数がもっと増えてきたら、引数ごとに改行を入れることが多いです。今回は引数の数がそこまで多くないので、1行で書きました。

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

このようにpropsのようなオブジェクトにまとめて、後で取り出したほうがスッキリする、ということですよね?

そうです!

自分も以前はそう思っていたのですが、最近では事情が異なっていることを最近知りました。

参考URLありがとうございます!!!

今のReactでは
デフォルト引数を使う
分割代入を使う
ことが推奨されているようです!

そうだったのですね 😳
たしかに、以下の記事を見てみると現状の形式が一番良さそうですね 👀

[React] 関数コンポーネントのpropsの渡し方と分割代入

? `/api/reports.json?page=${page}&company_id=${companyId}`
: all === true
? `/api/reports.json?page=${page}&practice_id=${userPracticeId}`
: console.log('data_fetched!'),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

複数の条件に合う引数が渡されることはありますか?
引数の内容がuserId !== '' all === true の場合に、後ろに書いてあるall === true の処理が実行されないことを懸念しています。
処理実行の優先度など含め問題なさそうであればOKです!

const per = 20
const neighbours = 4
const defaultPage = parseInt(queryString.parse(location.search).page) || 1
const [page, setPage] = useState(defaultPage)
const [practiceId, setPracticeId] = useState('')
const [userPracticeId, setUserPracticeId] = useState('')
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

practiceId, setPracticeIdを削除する必要はあるのでしょうか?
単に変数名を被らないようにするためであれば、削除は不要かと思います!
(元の変数名が適切ではなかったとかですかね...?)

@mono-nobe
Copy link
Contributor

@lef237
お疲れ様です!
ご対応 & レビュー依頼ありがとうございます。😊

コメントしましたので、ご確認をお願いします!
Reactの知見が全くないため、見当違いな指摘があるかもしれないです... 🙏

@lef237
Copy link
Contributor Author

lef237 commented Feb 17, 2023

@mono-nobe
お疲れ様です!
丁寧にレビューして頂き、ありがとうございます✨

コード上でコメント返しを致しました。ご確認頂けると幸いです🙏

@mono-nobe
Copy link
Contributor

@lef237
早速のご対応ありがとうございます!
かなり詳細にコメントいただいたおかげで、理解が深まりました 😊
コード部分についてはLGTMです!✨

1つ気になることがあり、http://localhost:3000/reportsにおけるプラクティスでの絞り込みが機能していないように見えるため、ご確認をお願いします 🙏

絞り込みなし

スクリーンショット 2023-02-17 9 45 14

絞り込みあり

表示されている日報に変化なし

スクリーンショット 2023-02-17 9 43 22

対象の日報

OS X Mountain Lionをクリーンインストールするのタグがないため、絞り込み時に除外されるはず

スクリーンショット 2023-02-17 9 43 38

@lef237 lef237 force-pushed the feature/reports-vue-to-react branch from 7d48314 to 14e13e4 Compare February 17, 2023 01:26
@lef237
Copy link
Contributor Author

lef237 commented Feb 17, 2023

@mono-nobe
お疲れ様です。ご確認ありがとうございます!

絞り込み機能がうまく働いていないバグを修正致しました! ご確認頂けると幸いです🙏

ご参考に、修正後の動作確認時のgif画像も添付致します。🖼

フィルター機能を修正

@mono-nobe
Copy link
Contributor

@lef237
ご対応ありがとうございます!
手元でも正常に動作する & 修正内容も問題ないことを確認しましたので承認します!

@lef237
Copy link
Contributor Author

lef237 commented Feb 17, 2023

@mono-nobe
丁寧にレビューして頂いたおかげで、Reactに関する理解が言語化できて、バグも修正することができました😄

ありがとうございました!🙌

@lef237
Copy link
Contributor Author

lef237 commented Feb 17, 2023

@komagata
お疲れ様です!
メンバーレビューが終わりましたので、ご確認頂けると幸いです。よろしくお願いします🙏

@lef237 lef237 force-pushed the feature/reports-vue-to-react branch from 14e13e4 to 34062a1 Compare February 18, 2023 03:33
@lef237
Copy link
Contributor Author

lef237 commented Feb 18, 2023

@komagata
ご指摘頂いた箇所 #6236 (comment) を修正致しました。

ご確認頂けると幸いです。よろしくお願いします🙏

Copy link
Member

@komagata komagata left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

確認させて頂きました。OKです〜🙆‍♂️

@komagata komagata merged commit bc11903 into main Feb 18, 2023
@komagata komagata deleted the feature/reports-vue-to-react branch February 18, 2023 05:13
@github-actions github-actions bot mentioned this pull request Feb 18, 2023
10 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants