반응형
반응 후크와 타이프스크립트를 사용하여 배열에서 개체를 푸시하는 방법
나는 이것이 완전히 잘못된 질문이라는 것을 알고 있고 미안하지만 나는 양식을 제출할 때 어떻게 오브젝트를 상태 배열로 넣어야 하는지 알아내려고 노력한다.감사합니다.
interface newList {
name: string;
}
const ListAdder = () => {
const [listName, setListName] = useState("");
const [listArray, setListArray] = useState<any>([]);
const submitHandler = (e: FormEvent<HTMLFormElement>) => {
e.preventDefault();
const myNewList: newList = {
name: listName,
};
setListArray([...listArray].push(myNewList));
setListName("");
console.log(listArray);
};
const listNameHandler = (e: FormEvent<HTMLInputElement>) => {
setListName(e.currentTarget.value);
};
return (
<>
<form onSubmit={submitHandler}>
<label>Create your List</label>
<br />
<input
type="text"
placeholder="List name is..."
value={listName}
onChange={listNameHandler}
/>
<button type="submit">Add the List</button>
</form>
</>
);
};
문제는 업데이트된 어레이 대신 푸시 결과, 즉 새 길이를 저장한다는 점이다.
setListArray([...listArray].push(myNewList)); // <-- saves result of push, [].length
넌 할 수 있다.concat
새 요소:
setListArray([...listArray].concat(myNewList));
아니면 그냥 추가해.
setListArray([...listArray, myNewList]);
추가 반 관련 문제, 상태 로그를 콘솔로 기록할 수 없으며 즉시 업데이트될 것으로 예상할 수 없음.
setListArray([...listArray, myNewList]);
console.log(listArray); // <-- still current state
반응 상태 업데이트는 비동기적이므로 이와 같은 상태를 로깅하면 다음 렌더 주기의 대기 상태가 아니라 현재 렌더 주기에서만 상태가 기록된다.업데이트 후 상태를 기록하려면useEffect
의지할 곳 없이 지내다
useEffect(() => {
console.log(listArray);
}, [listArray]);
반응형
'Programing' 카테고리의 다른 글
순서에 상관없이 2개의 리스트가 동일한 요소를 가지고 있는지 결정하시겠습니까? (0) | 2022.03.19 |
---|---|
개체와 같은 소품 기본값이 작동하지 않음 (0) | 2022.03.19 |
UnicodeEncodeError: 'ascII' 코덱이 위치 20에서 문자 u'\xa0'을 인코딩할 수 없음: 서수가 범위(128)에 없음 (0) | 2022.03.19 |
페이지 로드를 계속 허용하는 Vue 라우터 가드 방법 (0) | 2022.03.19 |
라우터 링크와 vue 및 vuetify 혼동 (0) | 2022.03.19 |