3月23日
16818 ワード
✍🏻 本日の整理目録
😝 未解決のリスト
🙆🏻♂️ HTMLデータセット(DataSet,data-)プロパティ
REACT HOOK userefを使用してDOMにある同じ要素のインデックスを検索するのは、思ったほど簡単ではありません.データ属性が見つかりましたHTML 5から生成されるデータ属性は、RECT要素ではなくDOM要素に特定のデータを格納するのに適している.
<div onClick={colorChange} data-num= '1'/>
データ属性は、上記のように「data-」で始まることができ、以降は自由に名前を指定できます.ここでは「data-num」という名前でデータを受信しますが、「data-len,data-number...」など自由に使えます.
これにより、要素データ属性が付与され、インデックス値が指定され、イベント関数で自由に制御できます.
console.log(e.target.dataset) -> DOMStringMap {num: '1'}
次に、ドーム要素のインデックスを指定し、CSS属性を変更するデータ属性を示します.const colorChange = (e) => {
const elemNum = e.target.dataset.num;
const elemArr = e.target.parentNode.childNodes;
for(let j = 0; j < 5; j++){
elemArr[j].style.backgroundColor = "transparent";
}
for(let i = 0; i < elemNum; i++){
elemArr[i].style.backgroundColor = "#64b5f6";
}
dispatch(updateData([choicedDay.choicedDay, elemNum]))
};
🙆🏻♂️ JavaScript Math.random()
Math.random()
は、0〜1(1を除く)の区間で整数を生成する.1) 0 <= random < 1
Math.random();
2) 0 Math.floor(Math.random());
3) 0 <= random <= 9 Math.floor(Math.random() * 10);
4) 0 <= random <= 10 Math.floor(Math.random() * 11);
5) 0 <= random <= 99 Math.floor(Math.random() * 100);
6) 0 <= random <= 100 Math.floor(Math.random() * 101);
7) 1 <= random <= 10 Math.random() * 10) + 1;
8)最小値、最大値の指定Math.floor(Math.random() * (max - min + 1)) + min
出典:https://hianna.tistory.com/454[昨日今日明日]
🙆🏻♂️ 色を分数で与える
const colorChange = (e) => {
const elemNum = e.target.dataset.num;
const elemArr = e.target.parentNode.childNodes;
for(let j = 0; j < 5; j++){
elemArr[j].style.backgroundColor = "transparent";
}
for(let i = 0; i < elemNum; i++){
elemArr[i].style.backgroundColor = "#64b5f6";
}
dispatch(updateData([choicedDay.choicedDay, elemNum]))
};
上記の方法では、データ属性値をDOM要素にインデックスを作成し、for文を用いてCSS属性のコードを提供する.次に、最後にインデックス値をアスタリスクとして割り当てます.では、更新されたスコアに基づいて色を点灯させる方法はありますか?
const rank = () => {
const rank = day_list.filter(v => v.day === choicedDay.choicedDay).shift().rank;
return rank
}
まずfilter法を用いてその週の要素を抽出した.月曜日のスコア3を更新すると、state値は{day: "월요일", rank: 3}
になるはずです.<Rate rank={rank}>
<div onClick={colorChange} data-num= '1'/>
<div onClick={colorChange} data-num= '2'/>
<div onClick={colorChange} data-num= '3'/>
<div onClick={colorChange} data-num= '4'/>
<div onClick={colorChange} data-num= '5'/>
</Rate>
👉 return内のfor文は役に立たないが、そのようなハードコーディングよりも良い方法はありませんか?propsでrankの価格を下げ、
& > div:nth-child(-n+${props => props.rank}){
background-color: #64b5f6;
}
対応する値を受け入れ、プロパティを適用します.🤦🏻♂️ export
// 현재 요일에 맞게 day_list를 재배열
const day_list = useSelector(state => state.data.list)
const getDay = new Date().getDay()
const newArr = () => {
if(getDay !== 0) day_list.push(...day_list.splice(0, getDay));
}
newArr();
現在週ごとに並べ替えられているコードを体現しています.ただし、別のコンポーネントが聞こえて戻ってくると再エクスポートされるため、コードは再実行されます.
一度だけ実行させる方法はありますか?
これは条件文がエクスポートした曜日配列ではありません.
何度でも繰り返しても、決まった配列を見つけることがポイントです.
// 현재 요일에 맞게 day_list를 재배열
const week_day = day_list.map((v) => {
const getDay = new Date().getDay();
const num = getDay + v.id > 6 ? getDay + v.id - 7 : getDay + v.id;
return day_list[num]
})
getDay()
は、0〜6の整数値を導出する.これは7進数で、7以上になったら0から条件文を書けばいいのです.このように書くと、何度も素子を導出しても曜日の並びは変わりません.Reference
この問題について(3月23日), 我々は、より多くの情報をここで見つけました https://velog.io/@make_w/3월-23일テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol