재밌는데 어려웡..
const [ value, setValue ] = useState< number >();
const [ value, setValue ] = useState< number | string >(null);
function App() {
const [value, setValue] = useState("");
// → 타입스크립트가 자동으로 타입을 유추하므로, string 으로 설정됨.
onChange = () => {}
return (
<div>
<form>
<input
value={value}
onChange={onChange}
type="text"
placeholder="username"
/>
<button>Log in</button>
</form>
</div>
)
}
input
의 value
를 state 의 value 와 연결,onChange
함수 등록!onChange = (evnet) => {};
onChange = (evnet:React.FormEvnet<element>) => {};
// (evnet: React.어디서 오는 이벤트인가?<어떤 element가 이 이벤트를 발생시키는가?>)
onChange = (evnet:React.FormEvnet<HTMLInputElement>) => {};
onChange
함수가 InputElement
에 의해서 실행된다는 것을 알 수 있따.traget
이 아니라currentTarget
을 사용해야한다.onChange = (evnet:React.FormEvnet<HTMLInputElement>) => {
const { cuurentTarget: {value} } = event;
// 위 코드는 const value = event.currentTarget.value 와 같다.
setValue(value)
};
cureentTarget
의 value
를 얻어와서, setValue
에 설정.Form
에 submit 을 할 수 있는 기능도 넣어보자.const onSubmit = (event:React.FormEvnet<HTMLForm>) = {
event.preventDefault(); // 기본 이벤트 제거
console.log("hello", value);
};
return (
<div>
<form onSubmit={onSubmit}>
...
npm install @types/styled-components
// -styled.d.ts
import 'styled-components';
declare module 'styled-components' {
export interface DefaultTheme {
borderRadius: string;
colors: {
main: string;
secondary: string;
};
}
}
// -styled.d.ts
import 'styled-components';
declare module 'styled-components' {
export interface DefaultTheme {
textColor: string;
bgColor: string;
btnColor: string;
}
}
// -theme.ts
import { DefaultTheme } from "styled-comonents";
export const lightTheme:DefaultTheme = {
textColor: "black",
bgColor: "white",
btnColor: "tomato",
}
export const darkTheme:DefaultTheme = {
textColor: "white",
bgColor: "black",
btnColor: "teal",
}
export
해주는 것 잊지 말긔// -index.tsx
const root = ReactDOM.createRoot(
document.getElementById("root") as HTMLElement
);
root.render(
<React.StrictMode>
<ThemeProvider theme={darkTheme}>
<App />
</ThemeProvider>
</React.StrictMode>
);
ThemeProvider
안에 있는 모든 컴포넌트들은 테마 오브젝트에 접근할 수 있게 되는거다.// -App.tsx
const Container = styled.div`
background-color: ${props => props.theme.bgcolor};
`;
const H1 = styled.h1`
color : ${props => props.theme.textColor};
`;
function App() {
return
<div>
<Container>
<H1>Protected</H1>
</Container>
</div>
}
Container
, H1
두개의 스타일 컴포넌트에서SyntheticEvent 🚩 https://reactjs.org/docs/events.html
styled-components 🚩 https://styled-components.com/docs/api#typescript
와 타입스크립트.. 미쳤따..ㅎㅎ