728x90
class
import React, { Component } from "react";
class ResponseCheck extends Component {
state = {
state: "waiting",
message: "클릭해서 시작하세요!!",
result: [],
};
timeout;
startTime;
endTime;
onClickScreen = () => {
const { state, message, result } = this.state;
if (state === "waiting") {
this.setState({
state: "ready",
message: "초록색이 되면 클릭하세요.",
});
this.timeout = setTimeout(() => {
this.setState({
state: "now",
message: "클릭",
result: [],
});
this.startTime = new Date();
}, Math.floor(Math.random() * 1000) + 2000);
} else if (state === "ready") {
clearTimeout(this.timeout);
this.setState({
state: "waiting",
message: "초록색이 된 후에 클릭하세요.",
});
} else if (state === "now") {
this.endTime = new Date();
console.log(this.endTime - this.startTime);
this.setState((prevState) => {
return {
state: "waiting",
message: "클릭해서 시작해주세요.",
result: [...prevState.result, this.endTime - this.startTime],
};
});
}
};
renderAverage = () => {
const { result } = this.state;
return result.length === 0 ? null : (
<div>
평균 시간: {result.reduce((a, c) => a + c) / result.length}
ms
</div>
);
};
render() {
const { state, message } = this.state;
return (
<>
<div id="screen" className={state} onClick={this.onClickScreen}>
{message}
</div>
{this.renderAverage()}
</>
);
}
}
export default ResponseCheck;
hooks
import React, { useState, useRef } from "react";
const ResponseCheck_hooks = () => {
const [state, setState] = useState("waiting");
const [message, setMessage] = useState("클릭해서 시작하세요.");
const [result, setResult] = useState([]);
const timeout = useRef(null);
const startTime = useRef();
const endTime = useRef();
const onClickScreen = () => {
if (state === "waiting") {
setState("ready");
setMessage("초록색이 되면 클릭하세요.");
timeout.current = setTimeout(() => {
setState("now");
setMessage("클릭");
setResult([]);
startTime.current = new Date();
}, Math.floor(Math.random() * 1000) + 2000);
} else if (state === "ready") {
clearTimeout(timeout.current);
setState("waiting");
setMessage("초록색이 된 후에 클릭하세요.");
} else if (state === "now") {
endTime.current = new Date();
setState("waiting");
setMessage("클릭해서 시작해주세요.");
setResult((prevResult) => {
return [...prevResult, endTime.current - startTime.current];
});
}
};
const renderAverage = () => {
return result.length === 0 ? null : (
<div>
평균 시간: {result.reduce((a, c) => a + c) / result.length}
ms
</div>
);
};
return (
<>
<div id="screen" className={state} onClick={onClickScreen}>
{message}
</div>
{renderAverage()}
</>
);
};
export default ResponseCheck_hooks;
전체코드 확인 : github.com/J3SUNG/React-Study/tree/master/React%20Study/4.%20%EB%B0%98%EC%9D%91%EC%86%8D%EB%8F%84
J3SUNG/React-Study
React. Contribute to J3SUNG/React-Study development by creating an account on GitHub.
github.com
해당 게시글은 www.youtube.com/watch?v=V3QsSrldHqI&list=PLcqDmjxt30RtqbStQqk-eYMK8N-1SYIFn&index=1&ab_channel=ZeroChoTV 의 강의내용을 기반으로 공부한 내용을 정리한 글입니다.
'React' 카테고리의 다른 글
[React] useEffect (0) | 2020.11.09 |
---|---|
[React] 클래스 라이프사이클 (0) | 2020.11.09 |
[React] setTimeout, clearTimeout (0) | 2020.11.06 |
[React] 조건문, 삼항 연산자 (0) | 2020.11.06 |
[React] 성능 최적화, PureComponent, memo, shouldComponentUpdate, React dev tools (0) | 2020.11.05 |