-
[react][strokeDasharray][strokeDashoffset]도넛차트금융프로젝트 2022. 11. 7. 16:10
strokeDasharray
<circle cx="110" cy="110" r="90" fill="none" stroke="yellow" strokeWidth="40" strokeDasharray={[30,5]} />
setDasharray에는 배열이 들어간다.
첫번째 요소에는 원의 길이,
두번째 요소에는 비어있는 길이이다.
strokeDashoffset
setDashoffset에는 원이 시작되는 위치를 지정한다.
연두색이 시작되는 부분은 전체길이-빨간길이이다.
도넛차트
- 데이터 불러오기
const [inout,setInout] = useState(0.25); const [deposit,setDeposit] = useState(0.25); const [saving,setSaving] = useState(0.25); const [ensurance,setEnsurance] = useState(0.25); useEffect(()=>{ fetch("<http://localhost:9090/bank/myGoods>").then(res=>res.json()).then( res=>{ let length = res.length; let inoutLength = 0; let deLength = 0; let saLength = 0; let enLength = 0; res.forEach(r=>{ if(r.typeId==110){ inoutLength++; }else if(r.typeId==220){ deLength++; }else if(r.typeId==330){ saLength++; }else{ enLength++; } }); setTimeout(() => { setInout(inoutLength/length); setDeposit(deLength/length); setSaving(saLength/length); setEnsurance(enLength/length); }, 1000); } ); })
상태변수의 초기값은 0.25이다.
setTimeout을 이용해 1초 뒤에 상태변수를 변경해준다.
const Circle = ()=>{ return<div> <div style={{ width: '10vw', height: '10vw' }}> <svg viewBox="0 0 250 250"> <circle cx="110" cy="110" r="90" fill="none" stroke="beige" strokeWidth="40" strokeDasharray={[2*Math.PI*90*inout,2*Math.PI*90*(1-inout)]} strokeDashoffset={2*Math.PI*90*0} /> <circle cx="110" cy="110" r="90" fill="none" stroke="green" strokeWidth="40" strokeDasharray={[2*Math.PI*90*deposit,2*Math.PI*90*(1-deposit)]} strokeDashoffset={2*Math.PI*90*(1-inout)} /> <circle cx="110" cy="110" r="90" fill="none" stroke="yellow" strokeWidth="40" strokeDasharray={[2*Math.PI*90*saving,2*Math.PI*90*(1-saving)]} strokeDashoffset={2*Math.PI*90*(1-inout-deposit)} /> <circle cx="110" cy="110" r="90" fill="none" stroke="red" strokeWidth="40" strokeDasharray={[2*Math.PI*90*ensurance,2*Math.PI*90*(1-ensurance)]} strokeDashoffset={2*Math.PI*90*(1-inout-deposit-saving)} /> </svg> </div> </div>; } return( <Box><Circle></Circle> </Box> );
완성
'금융프로젝트' 카테고리의 다른 글
[국민 은행 클론코딩][vue]메인 슬라이드 (0) 2022.11.10 [국민 은행 클론코딩][vue] 헤더 구현 (0) 2022.11.10 [react][setTimeout]슬라이드 (0) 2022.11.04 [react][circle][svg]도넛차트 만들기 (0) 2022.10.31 [react][슬라이드] 3초마다 화면이 변경되는 슬라이드 구현 (0) 2022.10.27