React의 useState 훅을 사용할 때 nullable 상태를 입력하는 올바른 방법
타이핑하는 방법을 알아내는 데 어려움을 겪고 있어요.useState
이 함수는 태플을 반환하기 때문입니다.본질적으로, 저는null
초기값으로email
즉, 여기서 빈 문자열을 사용할 수 없다고 가정합니다.
그 후, 나는setEmail
이 상태 값을 갱신하는 함수(전자 메일을 문자열로 받아들임)입니다.
이상적으로 나는 나의 타자를 치고 싶다.useState
따라서 가능한 경우 이메일이 문자열이거나 null일 것으로 예상합니다.현재로선 그것만을 상속받고 있다.null
import * as React from "react";
const { useState } = React;
function Example() {
const [state, setState] = useState({ email: null, password: null });
function setEmail(email: string) {
setState(prevState => ({ ...prevState, email }))
}
return <p>{state.email}</p>
}
다음 에러가 반환됩니다.setEmail
이후 기능하다string
in function 인수가 올바른 유형이 아닙니다.null
에 명시되어 있다useState()
[ts]
Argument of type '(prevState: { email: null; password: null; }) => { email: string; password: null; }' is not assignable to parameter of type 'SetStateAction<{ email: null; password: null; }>'.
Type '(prevState: { email: null; password: null; }) => { email: string; password: null; }' is not assignable to type '(prevState: { email: null; password: null; }) => { email: null; password: null; }'.
Type '{ email: string; password: null; }' is not assignable to type '{ email: null; password: null; }'.
Types of property 'email' are incompatible.
Type 'string' is not assignable to type 'null'. [2345]
(parameter) prevState: {
email: null;
password: null;
}
현재 TypeScript 컴파일러는 다음과 같은 유형을 생각합니다.email
그리고.password
이다null
(다른 값은 없습니다).이 문제는 에 명시적인 유형 파라미터를 지정함으로써 해결할 수 있습니다.useState
타입이 되도록 호출하다email
그리고.password
라고 알려져 있다string
또는null
.
const { useState } = React;
function Example() {
const [state, setState] = useState<{email: null | string, password: null | string}>({ email: null, password: null });
function setEmail(email: string) {
setState(prevState => ({ ...prevState, email }))
}
return <p>{state.email}</p>
}
이 문제는 이미 몇 가지 점에서 해결되었습니다.
https://dev.to/busypeoples/notes-on-typescript-react-hooks-28j2
https://codewithstyle.info/Using-React-useState-hook-with-TypeScript/
TLDR: 빈 초기 상태가 있는 경우 type 인수를 setState로 전달합니다.
예:
const [email, setEmail] = useState<string>();
TS 매핑 유형을 사용하여 가독성을 높이고 null 값보다 정의되지 않은 것을 선호할 수 있습니다.
const { useState } = React;
function Example() {
const [state, setState] = useState<Partial<{email: string, password: string}>>();
function setEmail(email: string) {
setState(prevState => ({ ...prevState, email }))
}
return <p>{state.email | ""}</p>
}
언급URL : https://stackoverflow.com/questions/53338922/correct-way-to-type-nullable-state-when-using-reacts-usestate-hook
'programing' 카테고리의 다른 글
사양에서 JSON 데이터를 설명하는 방법은 무엇입니까? (0) | 2023.03.31 |
---|---|
부호화되지 않는 이유단일 따옴표/부호를 인코딩하는 URIC 컴포넌트 (0) | 2023.03.31 |
Spring Boot - Bean Definition Override예외:잘못된 콩 정의 (0) | 2023.03.31 |
jQuery Ajax 호출 및 HTML.위조 방지토큰() (0) | 2023.03.31 |
Python Flask, TypeError: 'dict' 개체를 호출할 수 없습니다. (0) | 2023.03.31 |