본문으로 건너뛰기

useArrayState

useArrayState는 배열 상태를 관리하는 커스텀 React 훅입니다.

배열에 대해 자주 사용하는 조작 메서드(push, pop, splice 등)를 포함한 불변성 기반의 유틸리티 함수를 제공합니다.

🔗 사용법

const [value, controls] = useArrayState(initialArray);

매개변수

이름타입설명
initialValueT[] | () => T[]초기 배열 값 또는 배열 반환 함수

반환값

[value, userDefinedArraySetterName]

인덱스이름타입설명
0valueArray현재 배열 상태 값
1controlsUserDefinedArraySetterNameType<T>배열을 조작할 수 있는 메서드 객체 (push, pop 등 제공)

🧭 지원하는 메서드 목록

메서드명설명
set(array)배열 전체를 새로운 배열로 교체합니다.
push(...v)배열 끝에 값을 추가합니다.
pop()배열 끝의 값을 제거합니다.
clear()배열을 비웁니다.
shift()배열 맨 앞의 값을 제거합니다.
unshift(...v)배열 맨 앞에 값을 추가합니다.
splice(start, deleteCount, ...v)배열의 특정 위치에 요소를 삽입하거나 제거합니다.
insertAt(index, ...v)지정된 위치에 값을 삽입합니다.
removeAt(index)지정된 위치의 값을 제거합니다.
updateAt(index, value)지정된 위치의 값을 새로운 값으로 교체합니다.

✅ 예시

import React from 'react';
import { useArrayState } from './useArrayState';

function TodoList() {
const [todos, todoActions] = useArrayState<string>([]);
// todos: string[]
// todoActions: UserDefinedArraySetterNameType<string>

const handleAdd = () => {
const newTodo = prompt('새로운 할 일을 입력하세요');
if (newTodo) {
todoActions.push(newTodo);
}
};

const handleRemove = (index: number) => {
todoActions.removeAt(index);
};

return (
<div>
<h2>📝 할 일 목록</h2>
<ul>
{todos.map((todo, i) => (
<li key={i}>
{todo}
<button onClick={() => handleRemove(i)}>삭제</button>
</li>
))}
</ul>
<button onClick={handleAdd}>할 일 추가</button>
<button onClick={() => todoActions.clear()}>전체 삭제</button>
</div>
);
}