
const [id, onChangeId] = useInput(""); 을 하면import { useState, useCallback } from "react";
// eslint-disable-next-line import/no-anonymous-default-export
export default (initValue = null) => {
const [value, setter] = useState(initValue);
const handler = useCallback(e => {
setter(e.target.value);
}, []);
return [value, handler, setter];
};
////////////////////////////////////////////////////////////////
//in Singup.jsx 에서 사용함 위와 다른 컴포넌트//
const [id, onChangeId] = useInput("");
////////////////////////////////////////////////////////////////
//in Singup.jsx 에서 사용함 위와 다른 컴포넌트//
<input
ref={idRef}
type="id"
value={id}
onChange={onChangeId}
placeholder="아이디(이메일)"
onBlur={onClickIdDup}
data-testid="idInput"
/>
23-04-18 수정
React가 의도한 useCallback의 올바른 사용법은 memo로 감싸진 컴포넌트에 props를 전달할 때 값이 변하지 않도록 해주는 것(useCallback)을 말한다.
따라서 만약 다시 코드를 작성해야한다면 useRef를 이용해서 input을 처리할 것이다.
> const add1 = () => x + y;
undefined
> const add2 = () => x + y;
undefined
> add1 === add2
false
fetchUser 함수가 변경될 때만 호출된다.fetchUser는 함수이기 때문에, userId 값이 바뀌든 말든 컴포넌트가 랜더링될 때 마다 새로운 참조값으로 변경이 된다.useEffect() 함수가 호출되어 user 상태값이 바뀌고 그러면 다시 랜더링이 되고 그럼 또 다시 useEffect() 함수가 호출되는 악순환이 반복된다.import React, { useState, useEffect } from "react";
function Profile({ userId }) {
const [user, setUser] = useState(null);
const fetchUser = () =>
fetch(`https://your-api.com/users/${userId}`)
.then((response) => response.json())
.then(({ user }) => user);
useEffect(() => {
fetchUser().then((user) => setUser(user));
}, [fetchUser]);
// ...
}
useCallback()hook 함수를 이용하면 컴포넌트가 다시 랜더링되더라도 fetchUser함수의 참조값을 동일하게 유지시킬 수 있다.useEffect()에 넘어온 함수는 userId값이 변경되지 않는 한 재호출 되지 않게 된다.import React, { useState, useEffect } from "react";
function Profile({ userId }) {
const [user, setUser] = useState(null);
const fetchUser = useCallback(
() =>
fetch(`https://your-api.com/users/${userId}`)
.then((response) => response.json())
.then(({ user }) => user),
[userId]
);
useEffect(() => {
fetchUser().then((user) => setUser(user));
}, [fetchUser]);
// ...
}


https://ko.javascript.info/destructuring-assignment
https://www.daleseo.com/react-hooks-use-callback/