[react]採点機能の実装
One Tid Freeon Bodding企業課題における採点機能の実施をまとめた.
本プロジェクトでは
5つの星が満点で、Boolean値を利用して論理を実現した.useStateを使用して、すべてのデフォルトをfalseに設定します.また、スコアが2の場合は[true,true,false,false,false]に限定される.
5つの星をスクリーンに表示するために、地図で回転するスタックアレイを作成しました.すると、クリックした星のインデックス値がelに印刷されます.3点をあげたら
最後に,filterを用いてtrue値のみを抽出し,lengthを用いて個数を決定してスコア値を送信する.
デフォルトの採点色はグレーで、マウスを離したり、選択したときに黒に変換したりして、以下のようにCSSが設定されています.
https://velog.io/@whoyoung90/TIL-35-WECODE-%EB%B3%84%EC%A0%90-%EA%B8%B0%EB%8A%A5-%EA%B5%AC%ED%98%84
インポートアイコン
本プロジェクトでは
react-icon
ライブラリを使用しています.import { ImStarFull } from "react-icons/im";
スコアチェックの設定
5つの星が満点で、Boolean値を利用して論理を実現した.useStateを使用して、すべてのデフォルトをfalseに設定します.また、スコアが2の場合は[true,true,false,false,false]に限定される.
// 별점 기본값 설정
const [clicked, setClicked] = useState([false, false, false, false, false]);
スコアチェックの最終設定
5つの星をスクリーンに表示するために、地図で回転するスタックアレイを作成しました.すると、クリックした星のインデックス値がelに印刷されます.3点をあげたら
el = index = 3
です. // 더미 배열을 통해 항상 별이 총 5개가 나오도록 한다.
const array = [0, 1, 2, 3, 4]
{array.map((el) => (
<ImStarFull
key={el}
onClick={() => handleStarClick(el)}
className={clicked[el] && 'black'}
size="35"
/>))}
クリックした星のel値(3)をhandleStarClick関数に送信し,クリックした星をtrueにする.for文をelの周りに回転させてfalseをtrueに変更します.const handleStarClick = index => {
let clickStates = [...clicked];
for (let i = 0; i < 5; i++) {
clickStates[i] = i <= index ? true : false;
}
setClicked(clickStates);
};
評価のエクスポート
最後に,filterを用いてtrue値のみを抽出し,lengthを用いて個数を決定してスコア値を送信する.
let score = clicked.filter(Boolean).length;
CSS設定
デフォルトの採点色はグレーで、マウスを離したり、選択したときに黒に変換したりして、以下のようにCSSが設定されています.
const RatingBox = styled.div`
margin: 0 auto;
& svg {
color: #C4C4C4;
cursor: pointer;
}
:hover svg {
color: black;
}
& svg:hover ~ svg {
color: #C4C4C4;
}
.black {
color: black;
}
`
参考資料
https://velog.io/@whoyoung90/TIL-35-WECODE-%EB%B3%84%EC%A0%90-%EA%B8%B0%EB%8A%A5-%EA%B5%AC%ED%98%84
Reference
この問題について([react]採点機能の実装), 我々は、より多くの情報をここで見つけました https://velog.io/@haha-rumi/React-별점-기능-구현テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol