별 등급을 렌더링하는 매우 간단한 방법
12603 단어 typescriptreactwebcomponentswebdev
이는 React에서 별 등급 구성 요소를 만드는 쉬운 방법입니다. 구성 요소는 제출 평가를 지원하지 않으며 별표만 사용하여 평가를 시각화하는 것입니다.
<Star />
및 <StarRating />
두 가지 구성 요소에 분할 솔루션을 수행했습니다.<Star />
구성 요소로 시작합니다. 구성 요소의 규칙을 설명하겠습니다.우리의 구성 요소 조건입니다.
구성 요소에는 소품이 하나만 있습니다.
type Props = {
// value from 0 to 1
filling?: number;
};
먼저 시작합시다. 쉽습니다.
export const Star = ({ filling }: Props) => {
if (typeof filling === 'undefined' || filling === 1) {
return (
<FilledStar />
);
}
if (filling === 0) {
return (
<EmptyStar />
);
}
//...
이것은 바이너리 이야기입니다. 다음으로 이동합니다.
채워진 별을 사용하여 겹치는 빈 별이 필요합니다. 나는 별에 컨테이너를 사용하고 각 별을 절대적으로 배치합니다. 채워진 별은
overflow: hidden
를 가지며 filling
소품을 사용하여 가시성을 제어하기 위해 별의 변경width
을 할 수 있습니다. //...
const width = filling * 100 + '%';
return (
<div className={styles.star}>
<div className={styles.fill} style={{ width }}>
<FilledStar />
</div>
<div className={styles.empty}>
<EmptyStar />
</div>
</div>
);
};
다음으로
StarRating
구성 요소가 필요합니다.구성 요소에도 하나의 소품이 있습니다.
type Props = {
value: number;
};
이제 별 다섯 개를 렌더링하는 간단한 구성 요소를 작성해 보겠습니다.
export const StarRating = ({ value }: Props) => (
<div className={styles.rating}>
{Array.from(Array(5)).map((_, index) => <Star />)}
</div>
);
매우 쉽다고 생각합니다. 남은 것은 채워진 별, 비어 있음 및 부분적으로 채워진 것을 렌더링해야 할 때를 이해하는 것입니다.
별의 일련 번호가 내림
value
보다 작거나 같으면 항상 채워진 별을 렌더링해야 합니다.if (starSerialNumber <= Math.floor(value) >=) {
//...
그리고 별의 일련 번호가 반올림
value
보다 크면 빈 별을 렌더링해야 합니다.if (starSerialNumber > Math.ceil(value) >=) {
//...
별의 일련 번호가 반올림되면
value
부분적으로 채워진 별을 렌더링해야 합니다.채우기 소품은 다음과 같이 계산됩니다.
const filling = value - index;
채우기
StarRating
구성 요소는 다음과 같습니다.export const StarRating = ({ value }: Props) => (
<div className={styles.rating}>
{Array.from(Array(5)).map((_, index) => {
const starSerialNumber = index + 1;
if (starSerialNumber <= Math.floor(value)) {
return (
<div key={starSerialNumber} className={styles.star}>
<Star />
</div>
);
}
if (starSerialNumber > Math.ceil(value)) {
return (
<div key={starSerialNumber} className={styles.star}>
<Star filling={0} />
</div>
);
}
const filling = value - index;
return (
<div key={starSerialNumber} className={styles.star}>
<Star filling={filling} />
</div>
);
})}
</div>
);
게시물을 읽어 주셔서 감사합니다. 좋은 하루 보내세요.
Reference
이 문제에 관하여(별 등급을 렌더링하는 매우 간단한 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/vladimirschneider/very-simple-way-render-star-rating-5d25텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)