-
Notifications
You must be signed in to change notification settings - Fork 71
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
Conversation
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.
コードを読み解く際のメモとして、セルフレビューを致しました。
📝←この絵文字で始まるコメントが、セルフレビューになっております。
assert_text '今日は頑張りました' | ||
end | ||
assert_selector 'img[alt="happy"]' | ||
assert_text '今日は頑張りました' |
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.
📝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></> | ||
} |
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.
📝unchecked
の有無によって文面が変わるように致しました
/> | ||
<NoReports /> | ||
<div> | ||
{practices && ( |
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.
📝practices
が存在するときは、このカッコ内の処理をおこなうようになっています
? `/api/reports.json?page=${page}&company_id=${companyId}` | ||
: all === true | ||
? `/api/reports.json?page=${page}&practice_id=${userPracticeId}` | ||
: console.log('data_fetched!'), |
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.
📝Reactへ渡される引数によって、fetch先を変えています。
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.
複数の条件に合う引数が渡されることはありますか?
引数の内容がuserId !== ''
と all === true
の場合に、後ろに書いてあるall === true
の処理が実行されないことを懸念しています。
処理実行の優先度など含め問題なさそうであればOKです!
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.
複数の条件に合う引数が渡されることはありますか?
複数の条件に合う引数が渡されることはありません。
slimを見て頂けると分かりやすいと思うのですが、例えば「全ての日報のデータをfetchしたい場合」と、「個人の日報のデータをfetchしてくる場合」で渡す引数が違うからです。
(fetch部分に関しては、どれか1つだけ引数を選ぶ形になっています)
優先度も考えて三項演算子で処理致しました! なので、問題ないと思います。
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.
複数の条件に合う引数が渡されることはありません。
優先度も考えて三項演算子で処理致しました!
ありがとうございます!
いただいた内容で懸念点解消されました! 🙌
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('') |
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.
📝プラクティスそのものの日報一覧と、特定のユーザー日報一覧で表示形式が違うため、処理が異なります。そのため、変数名が被らないように書き換えています。
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.
practiceId, setPracticeId
を削除する必要はあるのでしょうか?
単に変数名を被らないようにするためであれば、削除は不要かと思います!
(元の変数名が適切ではなかったとかですかね...?)
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.
(元の変数名が適切ではなかったとかですかね...?)
理由としては、これに近いです。
正確には、元の変数名だと不具合が生じるため、変数名を変更する必要がありました。
11行目でpracticeId
という変数名を使っています。これは、本来のvueのファイルに準拠した名前です。
これと同じ変数名が、こちらで最近追加されたPull Requestで使われてしまっていました。
そのため、もしこの16行目がpracticeId, setPracticeId
のままになっていると、 #6044 のPull Requestで実装した処理が動かなくなってしまいます。
(そのままの状態だと、11行目の変数定義と16行目の変数定義がバッティングして、エラーが出てReactが表示されなくなってしまいます💧)
削除をしているわけではなく、変数名を変更してかぶらないようにすることで、既存の処理を壊すことなく実装することができます。
なので、practiceId
をuserPracticeId
へと変更したのは、削除したわけではなく、
- 既存の処理を壊さずに新しい処理を追加するため
- 元の変数名が間違っていたため
という2つの理由からおこなっているものです。
この変更に伴い、この直下の22行目や23行目など、影響範囲のあるところも修正しております。
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.
そのため、もしこの16行目がpracticeId, setPracticeIdのままになっていると、#6044 のPull Requestで実装した処理が動かなくなってしまいます。
削除をしているわけではなく、変数名を変更してかぶらないようにすることで、既存の処理を壊すことなく実装することができます。
なるほどです!
既存処理への影響を懸念していたのですが、こちらで問題なさそうです。😊
</span> | ||
</a> | ||
</div> | ||
{displayUserIcon && ( |
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.
📝displayUserIconがある場合のみ、カッコ内の処理が行われます。
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.
この部分を別コンポーネントにするとわかりやすいかな〜と思いました。
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.
別コンポーネントを作成致しました!
差分はこちらになります。→ 34062a1
@mono-nobe |
export default function Reports({ user, currentUser, practices }) { | ||
export default function Reports({ all = false, userId = '', practices = false, unchecked = false, displayUserIcon = true, companyId = '', practiceId = '' }) { |
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.
変数の増加が気になります 👀
オブジェクトでまとめて扱うなどは難しそうですか?
よろしければ変数が増えている背景を教えていただきたいです!
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.
おそらくmono-nobeさんが仰っていることは、
export default function Reports (props) {
// 中の処理
}
このようにprops
のようなオブジェクトにまとめて、後で取り出したほうがスッキリする、ということですよね?👀
自分も以前はそう思っていたのですが、最近では事情が異なっていることを最近知りました。
https://discord.com/channels/715806612824260640/959777673612251146/1070993776899784704
AntiSatoriさんにこちらのDiscordで教えていただいたのですが、今のReactでは
- デフォルト引数を使う
- 分割代入を使う
ことが推奨されているようです!
そのため、ちょっとコードが長くなっていますが、このような形でコードを書きました。
※引数がもっと増えてきたら、引数ごとに改行を入れることが多いです。今回は引数の数がそこまで多くないので、1行で書きました。
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.
このようにpropsのようなオブジェクトにまとめて、後で取り出したほうがスッキリする、ということですよね?
そうです!
自分も以前はそう思っていたのですが、最近では事情が異なっていることを最近知りました。
参考URLありがとうございます!!!
今のReactでは
デフォルト引数を使う
分割代入を使う
ことが推奨されているようです!
そうだったのですね 😳
たしかに、以下の記事を見てみると現状の形式が一番良さそうですね 👀
? `/api/reports.json?page=${page}&company_id=${companyId}` | ||
: all === true | ||
? `/api/reports.json?page=${page}&practice_id=${userPracticeId}` | ||
: console.log('data_fetched!'), |
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.
複数の条件に合う引数が渡されることはありますか?
引数の内容が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('') |
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.
practiceId, setPracticeId
を削除する必要はあるのでしょうか?
単に変数名を被らないようにするためであれば、削除は不要かと思います!
(元の変数名が適切ではなかったとかですかね...?)
@lef237 コメントしましたので、ご確認をお願いします! |
@mono-nobe コード上でコメント返しを致しました。ご確認頂けると幸いです🙏 |
@lef237 1つ気になることがあり、 絞り込みなし絞り込みあり表示されている日報に変化なし 対象の日報
|
7d48314
to
14e13e4
Compare
@mono-nobe 絞り込み機能がうまく働いていないバグを修正致しました! ご確認頂けると幸いです🙏 ご参考に、修正後の動作確認時のgif画像も添付致します。🖼 |
@lef237 |
@mono-nobe ありがとうございました!🙌 |
@komagata |
14e13e4
to
34062a1
Compare
@komagata ご確認頂けると幸いです。よろしくお願いします🙏 |
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.
確認させて頂きました。OKです〜🙆♂️
Issue
概要
reports.vue
が使われていた箇所を、Reports.jsx
に書き換えました。また、それに伴い依存関係にあるファイルを修正しました。
変更確認方法
feature/reports-vue-to-react
をローカルに取り込むrails db:reset
をするbin/setup
をおこなうrails s
で起動して、komagata
さんでログインするユーザーの日報
のタブをクリックしますScreenshot
見た目の変化はありません。
上記のリンク先をそれぞれ確認していただければ大丈夫です!