[볶다] 8. 로딩 애니메이션 구현하기.
업데이트:
로딩 애니메이션 가져오기
로딩 여부를 확인해야 하는 컴포넌트는 ResultList 입니다. 따라서 검색 결과를 불러올 때 까지 로딩 애니메이션을 표시하겠습니다. 애니메이션은 따로 만들지 않고, 구글 머티리얼 디자인에서 사용합니다.
Home.js
import { CircularProgress } from "@material-ui/core";
...
<CircularProgress className="spinner"/>
...
정상적으로 화면에 애니메이션이 표시됩니다.
hook으로 애니메이션 제어하기
로딩 여부를 관리하는 hook을 하나 만듭니다. Home.js
...
const [loaded, setLoaded] = useState(false);
...
loaded hook의 작동 로직입니다.
기본상태 = false 검색버튼 클릭 = true 컴포넌트 로딩 완료 = false
삼항연산자를 사용하여 애니메이션을 관리하겠습니다.
Home.js
...
const [loaded, setLoaded] = useState(false);
{
loaded === true ? (
<>
<br />
<br />
<br />
<CircularProgress className="spinner" />
<br />
<br />
</>
) : null;
}
...
hook으로 컴포넌트 로딩 여부 확인하기
먼저, 검색버튼을 누르면 loaded의 상태를 true로 변경해야 합니다.
Home.js
const onSubmit = (data) => {
LIFE_VALUE = data.lifeArr;
CHAR_VALUE = data.charArr;
INDVD_VALUE = data.indvdArr;
DESIRE_VALUE = data.desireArr;
setLoaded(true); // onSubmit 함수를 실행하면 loaded의 값을 true로 설정합니다.
getAPI();
};
getAPI 이후 parseStr 함수가 차례대로 실행되면 loaded의 값을 다시 false 로 변경합니다.
async function parseStr(dataSet) {
const dataArr = new XMLParser().parseFromString(dataSet).children;
resultCount = dataArr.length; // 검색된 데이터의 수를 구한다. (dataArr length 에서 5개 값이 빠짐)
setState((preState) => {
return {
...preState,
results: dataArr.slice(resultNumber, resultCount - 1),
};
});
setLoaded(false);
}
정상적으로 hook을 사용하여 로딩 애니메이션을 구현했습니다.
댓글남기기