상향식 State 이동을 사용해보자 = ( 상위컴포넌트에서 하위로, 함수를 넘겨주고 실행시키자 )
혹시 까먹었을 수 있으니 타입스크립트가 없는 코드는
<App.js> ========================================
function App() {
const onAddTodo = (text) =>{
console.log(text)
}
return (
<div className="App">
<Todos items={items} amount={3} />
<NewTodo onAddTodo={onAddTodo}/>
</div>
);
}
export default App;
< Component > ========================================
import React from "react";
import { useRef } from "react";
const NewTodo = (props) => {
const { onAddTodo } = props
const textRef = useRef();
const submitHandler = (event) => {
event.preventDefault();
const textData = textRef.current.value;
props.onAddTodo(textData)
};
return (
<div>
<form onSubmit={submitHandler}>
...
==> 상위컴포넌트에서 포인터를 넘겨준 함수를 가지고
하위컴포넌트의 값을 가지고 그 포인터를 실행함으로써, 상위 컴포넌트에서 실제로 실행되고,
하위 컴포넌트의 값을 상위 컴포넌트에 올릴 수 있다.
타입스크립트를 사용한다면, 넘겨주는 함수의 타입을 지정해주어야한다.
<App.js> ========================================
function App() {
const onAddTodo = (text:string) =>{
console.log(text)
}
return (
<div className="App">
<Todos items={items} amount={3} />
<NewTodo onAddTodo={onAddTodo}/>
</div>
);
}
export default App;
< Component > ========================================
import React from "react";
import { useRef } from "react";
const NewTodo: React.FC<{ onAddTodo: (text: string) => void }> = (props) => { // 1*
const textRef = useRef<HTMLInputElement>(null);
const submitHandler = (event: React.FormEvent) => {
event.preventDefault();
const textData = textRef.current!.value;
props.onAddTodo(textData); // 2*
};
return (
<div>
<form onSubmit={submitHandler}>
...
1*. onAddTodo 함수는, App.js 에서 props 로 넘겨준 함수이다.
"props 객체" 를 사용하므로 React.FC<{ }> 를 사용하여, props 객체 안에 대한 값의 타입을 지정한다.
onAddTodo 의 타입은 "함수" 이다.
따라서 onAddTodo : () => {} 가 된다. [ 함수타입 명명 : () => {return}]
하지만 onAddTodo 는 반환값이 없다. 즉, void 타입이다.
따라서 onAddTodo : () => void 가 된다.
또한, 파라미터를 받는다. 파라미터의 타입은 string 이다. 파라미터 이름은 맘대로 짓는다.
따라서 " onAddTodo : (text:string) => void " 가 최종 onAddTodo 의 타입이 된다.
2*. 타입을 정했으니, 사용은 편하게 하면 된다.
'React > React-TypeScript' 카테고리의 다른 글
6. React와 함께 TypeScript 사용하기(5), [ State ] (1) | 2022.12.26 |
---|---|
5. React와 함께 TypeScript 사용하기(4), [ props.children 의 사용, Layout 만들기] (0) | 2022.12.25 |
3. React와 함께 TypeScript 사용하기(2), [ useRef 와 양식 제출, event ] (0) | 2022.12.24 |
2. React와 함께 TypeScript 사용하기(1), [ props 와 React.FC , 타입 아웃소싱, Type Aliases ] (0) | 2022.12.23 |
1. TypeScript 의 기본 설명과 문법, 그리고 redeclare 오류 (1) | 2022.12.23 |
댓글