const onCreate = () => {
// input 값을 user에 대입
const user = {
id: nextId.current,
username,
email,
}
// users 배열에 user 추가 - concat 함수
setUsers(users.concat(user))
// input 값 초기화
setInputs({
username: '',
email: '',
})
nextId.current += 1
}
const onRemove = (id) => {
// user.id가 파라미터로 일치하지 않는 원소만 추출해서 새로운 배열을 만듦
// user.id가 id 인 것을 제거
setUsers(users.filter((user) => user.id !== id))
}
const onToggle = (id) => {
setUsers(users.map((user) => (user.id === id ? { ...user, active: !user.active } : user)))
}
const onCreate = useCallback(() => {
// input 값을 user에 대입
const user = {
id: nextId.current,
username,
email,
}
// users 배열에 user 추가 - concat 함수
setUsers(users.concat(user))
// input 값 초기화
setInputs({
username: '',
email: '',
})
nextId.current += 1
}, [users, username, email])
const onRemove = useCallback(
(id) => {
// user.id가 파라미터로 일치하지 않는 원소만 추출해서 새로운 배열을 만듦
// user.id가 id 인 것을 제거
setUsers(users.filter((user) => user.id !== id))
},
[users]
)
const onToggle = useCallback(
(id) => {
setUsers(users.map((user) => (user.id === id ? { ...user, active: !user.active } : user)))
},
[users]
)
import { useRef, useState, useMemo, useCallback } from 'react'
import { CreateUser } from './CreateUser'
import { UserList } from './UserList'
const countActiveUsers = (users) => {
console.log('활성 사용자 수를 세는 중...')
const count = users.filter((user) => user.active).length
return count
}
export const Test = () => {
const [inputs, setInputs] = useState({
username: '',
email: '',
})
const { username, email } = inputs
const onChange = useCallback(
(e) => {
const { name, value } = e.target
setInputs({
...inputs,
[name]: value,
})
},
[inputs]
)
const [users, setUsers] = useState([
{
id: 1,
username: 'velopert',
email: 'public.velopert@gmail.com',
active: true,
},
{
id: 2,
username: 'tester',
email: 'tester@example.com',
active: false,
},
{
id: 3,
username: 'liz',
email: 'liz@example.com',
active: false,
},
])
const nextId = useRef(4)
const onCreate = useCallback(() => {
// input 값을 user에 대입
const user = {
id: nextId.current,
username,
email,
}
// users 배열에 user 추가 - concat 함수
setUsers(users.concat(user))
// input 값 초기화
setInputs({
username: '',
email: '',
})
nextId.current += 1
}, [users, username, email])
const onRemove = useCallback(
(id) => {
// user.id가 파라미터로 일치하지 않는 원소만 추출해서 새로운 배열을 만듦
// user.id가 id 인 것을 제거
setUsers(users.filter((user) => user.id !== id))
},
[users]
)
const onToggle = useCallback(
(id) => {
setUsers(users.map((user) => (user.id === id ? { ...user, active: !user.active } : user)))
},
[users]
)
const count = useMemo(() => countActiveUsers(users), [users])
return (
<>
<CreateUser username={username} email={email} onChange={onChange} onCreate={onCreate} />
<UserList users={users} onRemove={onRemove} onToggle={onToggle} />
<div>활성사용자 수 : {count}</div>
</>
)
}
const onToggle = useMemo(
() => () => {
/* ... */
},
[users]
);
해당 내용은 다음 자료를 참고했습니다.
https://react.vlpt.us/basic/18-useCallback.html