React Hooks를 사용하여 프로그래밍 방식으로 요소 배치
5558 단어 reacthooksjavascript
즐겨찾는 검색 엔진을 상상해 보세요. 검색어를 입력하면 검색 입력 아래에 자동 완성 상자가 표시될 것입니다. 플로팅 요소를 만들어 보겠습니다.
TLDR;
여기codesandbox.에서 문제 및 솔루션의 전체 예를 찾으십시오.
그럼 크래킹을 해봅시다. 지금 당장은 너무 많은 세부 사항 없이 예제에서 표시할 콘텐츠가 있는 경우 요소를 표시하는 이동 솔루션을 찾을 수 있습니다. 또한 이 go-to가 표시될 때 아래로 이어지는 모든 요소를 이동하는 것을 볼 수 있습니다. 별로 좋지 않습니다.
동적으로 만들기
먼저 컨테이너가 다른 요소 위에 떠 있도록 빠른 스타일을 추가해 보겠습니다.
.searchresultsfloat {
position: absolute;
z-index: 1;
}
useRef
이제 이야기에서 우리는 위치를 연결하려는 요소를 알아야 합니다. 여기에서 useRef가 개입합니다. useRef를 사용하여 DOM 요소에 연결할 수 있는 참조를 만들 수 있습니다.
// Create our reference
const searchBarReference = React.useRef(null);
// Other React Pizzazz...
// Attach it to the element we want to judge our position against
<div ref={searchBarReference} className="box blue searchcontainer">
새로 참조된 요소가 렌더링되면 .current 변수에 있는 자신에 대한 정보로 참조를 채웁니다. 그런 다음 해당 참조에서 getBoundingClientRect() 함수를 호출하여 요소의 위치를 학습할 수 있습니다.
useEffect 후크 내에서 이를 수행하여 참조된 요소의 위치를 학습할 때 페이지가 렌더링된다는 것을 알 수 있습니다.
React.useEffect(() => {
if (searchBarReference.current) {
setSearchResultTop(searchBarReference.current.getBoundingClientRect().bottom);
}
}, []);
완벽한! 하지만 정답은 아닙니다. 이제 요소 렌더링이 필요한 위치에 있습니다. 그러나 화면 크기를 조정하면 결과 요소가 잘못된 위치에 있는 것을 볼 수 있습니다.
useLayoutEffect
이것은 useLayoutEffect 후크가 들어갈 수 있는 곳입니다. 이 후크는 모든 DOM 변형 후에 트리거된다는 유일한 차이점을 제외하면 표준 useEffect 후크와 동일하게 보입니다. 우리는 이것을 우리의 장점으로 사용할 수 있습니다:
React.useLayoutEffect(() => {
function updatePosition() {
setSearchResultTop(searchBarReference.current.getBoundingClientRect().bottom);
}
window.addEventListener('resize', updatePosition);
updatePosition();
return () => window.removeEventListener('resize', updatePosition);
}, []);
여기에서 크기 조정 이벤트를 기다리는 리스너를 만듭니다. 하나가 발생하면 참조된 요소의 경계를 다시 확인하여 결과를 업데이트하여 원하는 위치에 표시할 수 있습니다. 따라서 화면 크기를 조정할 때 결과가 있어야 할 위치에 표시됩니다.
리스너를 제거하는 함수를 반환해야 페이지가 마운트 해제될 때 리스너가 더 많은 이벤트를 기다리지 않게 됩니다. 그리고 짜잔:
그게 다야.
그래서 우리는 요소가 어디에 있는지 알기 위해 useRef를 사용했고 DOM 변형을 업데이트하기 위해 useLayoutEffect를 사용했습니다. 모두가 행복합니다!
항상 그렇듯이 이것이 유일한 해결책이 아니라 내가 찾은 해결책입니다. 연락하고 싶으시면 해주세요!
Reference
이 문제에 관하여(React Hooks를 사용하여 프로그래밍 방식으로 요소 배치), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/joepurnell1/programmatically-positioning-elements-with-react-hooks-aef텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)