
// Infer the type as "boolean"
const [enabled, setEnabled] = useState(false);
// Explicitly set the type to "boolean"
const [enabled, setEnabled] = useState<boolean>(false);
type RequestState =
| { status: 'idle' }
| { status: 'loading' }
| { status: 'success', data: any }
| { status: 'error', error: Error };
const [requestState, setRequestState] = useState<RequestState>({ status: 'idle' });
import {useReducer} from 'react';
interface State {
count: number
};
type CounterAction =
| { type: "reset" }
| { type: "setCount"; value: State["count"] }
const initialState: State = { count: 0 };
function stateReducer(state: State, action: CounterAction): State {
switch (action.type) {
case "reset":
return initialState;
case "setCount":
return { ...state, count: action.value };
default:
throw new Error("Unknown action");
}
}
export default function App() {
const [state, dispatch] = useReducer(stateReducer, initialState);
const addFive = () => dispatch({ type: "setCount", value: state.count + 5 });
const reset = () => dispatch({ type: "reset" });
return (
<div>
<h1>Welcome to my counter</h1>
<p>Count: {state.count}</p>
<button onClick={addFive}>Add 5</button>
<button onClick={reset}>Reset</button>
</div>
);
}
- interface State : reduce의 state를 설명
- type CounterAction : reducer에 전달할 수 있는 다른 작업을 설명
- const initialState : 초기 state에 대한 type과 useReducer에서 기본적으로 사용되는 type 제공
- stateReducer(state: State, action: CounterAction) : state reduce 함수의 매개변수 및 return 값에 대한 type 설정
import { createContext, useContext, useState } from 'react';
type Theme = "light" | "dark" | "system";
const ThemeContext = createContext<Theme>("system");
const useGetTheme = () => useContext(ThemeContext);
export default function MyApp() {
const [theme, setTheme] = useState<Theme>('light');
return (
<ThemeContext.Provider value={theme}>
<MyComponent />
</ThemeContext.Provider>
)
}
function MyComponent() {
const theme = useGetTheme();
return (
<div>
<p>Current theme: {theme}</p>
</div>
)
}
const visibleTodos = useMemo(() => filterTodos(todos, tab),[todos, tab]);
import { useState, useCallback } from 'react';
export default function Form() {
const [value, setValue] = useState("Change me");
const handleChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>((event) => {
setValue(event.currentTarget.value);
}, [setValue])
return (
<>
<input value={value} onChange={handleChange} />
<p>Value: {value}</p>
</>
);
}
import { useState } from 'react';
export default function Form() {
const [value, setValue] = useState("Change me");
function handleChange(event: React.ChangeEvent<HTMLInputElement>) {
setValue(event.currentTarget.value);
}
return (
<>
<input value={value} onChange={handleChange} />
<p>Value: {value}</p>
</>
);
}
c omponent의 하위 항목을 설명하는 데는 두가지 일반적인 경로가 있음
1. React.ReactNode : JSX에서 자식으로 전달될 수 있는 모든 가능한 유형의 통함
2. React.ReactElement : 문자열이나 숫자와 같은 Javascript 기본 요소가 아닌 JSX 요소
interface MyComponentProps {
style: React.CSSProperties;
}