今日のホットスポットレンダリング
6820 ワード
😎 今日の事
🤔 今日の話題
1.ログインログアウト時のページ更新の問題
ログインログアウトページレンダリングエラーの変更
ログイン後に/beansページにログインし、ログアウト後に別のIDでログインした場合、/beansページはリフレッシュされません.
問題の状況
app.jsでは、userEffectで登録するたびにisLoginステータスをチェックしてLoginを設定します.
したがって,isLoginをpropsとして受信したサブコンポーネントもisLogin状態が変化するたびに再ロードされる.
たとえば、
test 1でログインしてbeansページにアクセスすると、beansページがログアウトしてtest 2でログインすると、beansページが再ロードされ、test 2の好きなソースディレクトリが表示されます.
結果、
しかし、予想とは異なり、beansページは再ロードされず、リフレッシュまたは別のページに入ってから戻るだけで状態が変化します.
私の錯覚.
isLogin状態が変化すると、propsとして受信した下位要素が再レンダリングされます.ただし、サブコンポーネントのstateは変更されていないため、表示されるbeansページは元のままです.
だから解決したのは.
各構成部品にisLoginをpropsとして渡し、状態の変化に応じてuseEffectを実行し、LoginIdに適切な値を要求して状態値を変更し、正しく動作することを確認します.
これは非常に簡単な問題で、reactの基本概念で、多くのstate、propsで実現した後、基本的な部分を逃したようです.
export default function Beans({ loginId }) {
const [allBeanName, setAllBeanName] = useState([]);
const [beans, isLoading, setBeans] = useLoading([], getAllBeans, loginId);
const [openModal, cardBeanInfo, cardPostInfo, beanModal, closeModal] = useBeanModal(beans);
...}
export function useLoading(inital, httpService, arg) {
const [data, setData] = useState(inital);
const [isLoading, setIsLoading] = useState(true);
useEffect(() => {
setIsLoading(true);
httpService()
.then((res) => {
setData(res);
setIsLoading(false);
})
.catch((err) => {
console.log(err.response);
});
}, [arg]);
return [data, isLoading, setData];
}
2.beansページ4回ネットワーク通信...?
3.会員加入画面実施時に頻繁に通信
会員登録の過程で身分検査を繰り返す段階がある.最終的にはボタンを押して繰り返し判別要求を送信することが実現したが,文字を入力するたびにリアルタイムで判別を繰り返す論理もよいと思う.
しかし,1文字書くごとにサーバリクエストを送信して繰り返し判別するのは効率的ではないようである.
NAVERの場合、onBlurとなったときに一度サーバリクエストを送信することを確認したが、このように一度または少量のサーバリクエストで繰り返し判別する方法もある.
このプロジェクトでは、ログイン部分が私の部分ではないため、自分の意思ではできませんが、次のプロジェクトでは、以下の方法で実施することをお勧めします.
settimeoutで判別する方法があるはずです.すなわち,inputウィンドウはonFocusとなり,ユーザはonkeydownを停止し,1秒後に1回リクエストを送信する.これにより,少ない要求で繰返し判別が可能となる.
ネイバーみたいにonblurになった時に作ったしかし,ユーザはそれを知らずに繰り返し判断を待ち続け,onblurを使用しない可能性がある.
3.rest apiブランチ不要
//TODO 모든 원두 가져오기
export const getAllBeans = async () => {
const res = await axios.get(`${http}/bean/all-beans`);
return res.data.beanList;
};
//TODO 필터링 원두 가져오기
export const getFilterBeans = async (data) => {
const res = await axios.get(`${http}/bean/filter-beans`, { params: { ...data } });
return res.data;
};
これもバックグラウンドとの会話で出てくるテーマです.彼は、すべてのインポートとフィルタリングされたインポートのrest apiの端点を分離する必要はなく、分岐を行う必要があり、これはより面倒なタスクだと述べた.
つまり、GETコーヒー豆は/beanであり、paramsでfilterかどうかを判断できるので、端点を区切る必要はありません.
4.rest apiの追加(転送完了)
投稿の削除
request => body : {data : {postId}}
応答=>成功時204/失敗時400
投稿コメントの作成
request => body : { data: { postId, comment } }
response=>{userId:[userId],commentId:1,comment:[newコンテンツレビュー],createAt:[2010-20-20ポイント分秒]}
投稿コメントの削除
request => body : { data: { postId, commentId } }
応答=>成功時204/失敗時400
投稿コメントの変更
request => body : { data: { postId, commentId, editComment }}
応答=>成功時204/失敗時400
特定の投稿の内容とコメントの取得
request
response
{
postCotents: {
title: 'this is titlethis is titlethis is title',
imageUrl: '/asset/beans/bean4.jpg',
beanRatio: {
자바: 4,
케냐: 2,
'탄자니아 킬리만자로 AA': 4,
'탄자니아 킬리만자로 A': 4,
'탄자니아 킬리만자로': 4,
},
water: 15,
waterTemp: 80,
content:
'게시물 내용 이것은 게시물 내용 이것은 게시물 내용 이것은\n 게시물 내',
userId: 'meme',
createAt: '2020-12-20 시분초',
},
comments: [
{
userId: '작성자id입니다',
commentId: 1,
comment: '댓글 내용댓글 내용댓글 내용댓글 내용',
createAt: '2020-12-20',
},
{
userId: 'userId',
commentId: 2,
comment: '댓글 내용댓글 내용댓글 내용댓글 내용',
createAt: '2020-12-20',
},
{
userId: '작성자임',
commentId: 3,
comment: '댓글 내용댓글 내용댓글 내용댓글 내용댓글 내용댓글 내용댓글 내용댓글 내용댓글 내용',
createAt: '2020-12-20',
},
{
userId: '작성자id입니다',
commentId: 4,
comment: '댓글 내용',
createAt: '2020-12-20',
},
],
};
http=>httpsに変更
http配信で行こうと思っていたのですが、googlechromeの2月の更新コンテンツ(Cookie転送ホットスポット)でhttp配信に切り替わり、複数のCORSエラーになってしまいました
クッキーオプションcorsエラークリア
sameSite:none=>常にCookieを送信できます.CookieオプションではSecureオプションが必要です
Secure:httpプロトコルを使用して通信する場合にのみCookieを送信
app.use(
cors({
origin: [
'https://localhost:3000', 'http://localhost:3000',
'https://www.beanus.tk', 'http://www.beanus.tk',
'https://practic.beanus.tk', 'http://practic.beanus.tk'
],
credentials: true,
methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
})
);
sendAccessToken: (res, accessToken) => {
res.cookie('accessToken', accessToken, {
httpOnly: true,
secure: true,
sameSite: 'None',
expires: new Date(Date.now() + 1000 * 60 * 60 * 48),
});
},
😎 DevLog
基本的な重要性
今日はどのようにプロジェクトに貢献しましたか。
追加
今日のプロジェクトで苦労したことは何ですか。
今日のプロジェクトで残念に思ったことは何ですか。
明日は何をしてプロジェクトに貢献すればいいですか?
Reference
この問題について(今日のホットスポットレンダリング), 我々は、より多くの情報をここで見つけました https://velog.io/@ellie12/오늘의-이슈-a3iquzusテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol