-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreact.tsx
101 lines (89 loc) · 2.39 KB
/
react.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
// import * as React from "react";
// import React from "react";
import React, {
useState,
useCallback,
useRef,
FunctionComponent,
ReactElement,
FC,
ReactNode,
useEffect,
FormEvent,
MouseEvent,
} from "react";
// JSX.Element는 import할 필요 ❌
// import { useState, useCallback, useRef } from "react";
interface P {
name: string;
title: string;
children?: ReactNode | undefined;
}
const WordRelay: FC<P> = (props) => {
// const WordRelay: FunctionComponent<P> = (props) => {
// const WordRelay = (props: P): ReactElement | JSX.Element => {
const [word, setWord] = useState<string>("bao");
// const [word, setWord] = useState<'bao'>("bao"); // 절대 변하지 않는다면 이렇게도 가능
const [word1, setWord1] = useState(() => {
return "bao";
});
const [value, setValue] = useState("");
const [result, setResult] = useState("");
const inputEl = useRef<HTMLInputElement>(null);
const HeadInputEl = useRef<HTMLHeadElement>(document.querySelector("head"));
const MutaHeadInputEl = useRef<HTMLHeadElement>(
document.querySelector("head")!
);
const mutaRef = useRef<number>(0);
const onClick = useCallback((e: MouseEvent<HTMLButtonElement>) => {}, []);
const onSubmitForm = useCallback<
(e: React.FormEvent<HTMLFormElement>) => void
>(
(e) => {
e.preventDefault();
const input = inputEl.current;
if (word[word.length - 1] === value[0]) {
setResult("딩동댕");
setValue("");
if (input) {
input.focus();
}
} else {
setResult("땡");
setValue("");
if (input) {
input.focus();
}
}
},
[word, value]
);
const deps: readonly any[] = [];
useEffect(() => {
// const finc = async () => {
// await axios.post();
// }
// finc();
setWord((prev) => {
return prev + 2;
});
console.log("useEffect"); // 처음 호출
return () => {
console.log("Lifecycle cleanup"); // 끝날 떄 호출
};
}, deps);
const onChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {
setValue(e.currentTarget.value);
}, []);
return (
<>
<div>{word}</div>
<form onSubmit={onSubmitForm}>
<input ref={inputEl} value={value} onChange={onChange} />
<button>입력!</button>
</form>
<div>{result}</div>
</>
);
};
export default WordRelay;