동적 아이템 선택: React Hooks로 제작
TLTR
15초간 설명을 보려면 아래의 빠른 설명으로 이동하십시오.
실제 작동을 보고 싶으십니까? deployed demo 을 사용해 보십시오. 심층 다이빙을 원하십니까? the repo에서 살펴보세요.
요구 사항
이 기사에서 설명할 내용을 이해하려면 아래 내용을 알아야 합니다.
위의 내용을 이해합니까? 좋아요, 계속 읽으세요! 그렇지 않다면 나는 그들에 대해 배우거나 재교육을 위해 빠른 인터넷 검색을 할 것입니다.
빠른 설명
이 후크를 통해 사용자는 호버링된 목록 항목을 강조하고 다른 모든 요소를 흐리게 하는 'n'개의 목록 항목을 만들 수 있습니다.
사용자가 더 이상 목록 항목 위로 마우스를 가져가지 않으면 모든 요소가 기본 정렬로 돌아갑니다.
이 후크는 또한 스타일이 지정된 구성 요소와 쌍을 이룹니다. 이 경우 내 스타일 요구 사항에 맞게 하드 코딩된 TextAnimateLi라고 하지만 스타일 및 요소 기본 설정으로 변경할 수 있습니다.
useTextAnimate
const useTextAnimate = (data) => {
const [content, setContent] = useState(data);
const setOneActive = (name) => {
let contentCopy = [...content];
contentCopy.forEach((item, index, arr) => {
if (arr[index].name !== name) {
arr[index].isActive = false;
}
});
setContent(contentCopy);
};
const setAllActive = () => {
let contentCopy = [...content];
contentCopy.forEach((item, index, arr) => {
arr[index].isActive = true;
});
setContent(contentCopy);
};
return { setOneActive, setAllActive, content };
};
이 후크를 사용하면 개체 배열을 인수로 사용합니다.
const data = useTextAnimate([
{ name: 'work', isActive: true },
{ name: 'about', isActive: true },
]);
여기에서 객체 배열
data
을 상태의 content
에 할당합니다. 이를 통해 동적 스타일 변경에 필요한 상태 저장 논리를 사용할 수 있습니다.그런 다음 이름이 일치하는 요소를 제외한 모든 요소를 false로 설정하는 첫 번째 함수
setOneActive
로 이동합니다. 하나의 요소를 강조하여 볼 수 있게 해주는 논리입니다.다음 함수
setAllActive()
는 기본 논리인 모든 항목을 강조하도록 설정합니다.반환되는 내용은 다음과 같습니다.
content
- 사용자가 제공한 개체의 배열입니다. setOneActive
- 기능setAllActive
- 기능실생활 사용
후크를 사용할 때 개체 배열을 인수로 사용합니다.
각 개체는 다음 속성을 포함해야 합니다.
const data = useTextAnimate([
{ name: 'work', isActive: true },
{ name: 'about', isActive: true },
{ name: 'contact', isActive: true },
{ name: 'cv', isActive: true },
]);
참고: useTextAnimate에서 검색된 값은 변수에 할당되어야 합니다.
useTextContent는 3가지를 반환합니다.
후크는 필요한 논리를 제공했습니다. 이제 해당 논리를 사용할 목록 항목으로 정렬되지 않은 목록을 채울 것입니다.
논리를 사용하기 전에 스타일 구성 요소 TextAnimateLi가 필요합니다.
const TextAnimateLi = styled.li`
color: white;
transition: color 0.2s;
cursor: pointer;
${({ content, index }) => {
if (content[index].isActive === false) {
return `
color: rgba(255, 255, 255, 0.5);
`;
}
}}
`;
짧고 달콤하게 유지합니다. useTextAnimate에서 제공하는 데이터를 사용하여 각 목록 항목의 스타일을 동적으로 지정합니다.
이제 이것을 함께 넣기 위해 예제에서 생성한 배열을 매핑해야 합니다.
data.content
를 사용하여 이 작업을 수행할 수 있습니다. 이전에 변수를 생성할 때 변수 이름data
을 사용하는 것은 개인적인 선택이었습니다. 당신이 원하는 무엇이든 될 수 있습니다!)<ul className={className}>
{data.content.map((item, index) => {
return (
<TextAnimateLi
key={index}
onMouseEnter={() => data.setOneActive(item.name)}
onMouseLeave={() => data.setAllActive()}
content={data.content}
index={index}
>
{item.name}
</TextAnimateLi>
);
})}
</ul>
무슨 일이야? 화살표 함수의 매개변수
item
는 배열 내용 내의 현재 객체입니다.각 구성 요소 TextAnimateLi에 대해 속성 집합을 추가합니다.
key
인덱스를 값으로 취해야 하며 uniqid())와 같은 것을 사용하지 마십시오. onMouseEnter
함수 호출 setOneActive()
onMouseLeave
함수 호출 setAllActive()
content
개체 배열을 가져옵니다index
현재 인덱스를 가져옵니다스타일 지정 논리를 이해하기 위해 TextAnimateLi를 다시 살펴보겠습니다.
/* It doesn't have to be a li. But for this case it's the best option. */
const TextAnimateLi = styled.li`
/* This is the default color */
/* You can set a new color here */
color: white;
transition: color 0.2s;
cursor: pointer;
${({ content, index }) => {
if (content[index].isActive === false) {
return `
/* This is the dimming color */
/* You can set a new color here */
color: rgba(255, 255, 255, 0.5);
`;
}
}}
`;
매우 간단합니다. 현재 항목이 활성화되어 있지 않으면 색상을 반환하고 그렇지 않으면 흐리게 표시되며 기본 색상으로 돌아갑니다.
적절하다고 생각되는 대로 변경하려면 코드에서 내 의견을 살펴보세요. 다양한 룩을 연출할 수 있는 스타일링을 자유롭게 해보세요!
즐기다!
Reference
이 문제에 관하여(동적 아이템 선택: React Hooks로 제작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/edgarcodes/dynamic-item-selection-made-with-react-hooks-3kfl텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)