간단한 화살표함수가 필요할 때 다들 어떻게 하시나요? #128
Replies: 3 comments 5 replies
-
비교해주신 두가지 방식에 대해서, 함수의 선언 횟수는 차이가 없어보입니다. 물론 자바스크립트 엔진에서 무언가 최적화 처리를 하는데 있어서 영향을 줄 수는 있지만, 그러한 것들은 대체로 그 차이가 미미한 수준으로, 코드 레벨에서 그것을 고려하는것은 불필요하지 않을까라는 생각이구요. 따라서 저같은 경우에는 성능의 관점 보다는 가독성의 관점으로 판단하고 정하게 되는 것 같습니다. 그러한 관점에서 생각했을땐..
정도가 저의 취향일것 같네요:) p.s 함수 선언 횟수에 차이가 없다고 생각하는 이유예시로 들어주신 코드에서 자바스크립트의 함수가 호출 및 실행 될때는 중괄호 내부의 모든 코드들이 모두 실행되게 될겁니다. import { useState } from 'react';
import './App.css';
export default function App() {. // <- App 컴포넌트 함수가 리렌더링(호출)되면,
const [count, setCount] = useState(0);
const handleIncrease = () => setCount(count + 1); // <- 이 코드 라인도 실행될 것이고,
const handleDecrease = () => setCount(count - 1);
return (
<>
<p>{count}</p>
<button onClick={handleIncrease}>증가</button> // <- 이 코드 라인도 실행될 것이다.
<button onClick={handleDecrease}>감소</button>
</>
);
} 함수 생성 횟수를 줄이기 위한 처리로는 아래와 같은 방법이 있지 않을까라고 생각합니다.
|
Beta Was this translation helpful? Give feedback.
-
저는 렌더링 태그에 인라인으로 화살표 함수를 직접 넣는 편인데요, 이유는 다음과 같습니다. 1. 특별한 경우가 아니면 성능 차이가 거의 없다.태그 안에 인라인 함수를 쓰든, 컴포넌트 내부에서 함수를 선언하든, 렌더링마다 함수는 새로 생성되므로 일반적으로 큰 차이가 없습니다. 다만, 함수를 자식 컴포넌트에 Prop으로 넘겨야 할 땐 주의가 필요합니다. 예를 들어 아래 코드처럼 인라인 함수를 넘길 경우, Parent가 렌더링될 때마다 Child에 전달되는 함수 참조가 계속 바뀌어 Child도 매번 리렌더링됩니다. // 부모 컴포넌트
function Parent() {
return <Child onMyClick={() => alert('Click!')} />;
}
// 자식 컴포넌트
interface ChildProps {
onMyClick: () => void;
}
function Child({ onMyClick }: ChildProps) {
return <div onClick={onMyClick}>Click Me!</div>;
} 이럴 땐 useCallback을 사용하면 함수를 매 렌더링마다 새로 생성하지 않도록 막을 수 있어, 자식 컴포넌트의 불필요한 리렌더링을 줄일 수 있습니다. // 부모 컴포넌트
function Parent() {
const handleMyClick = useCallback(() => {
alert('Click!');
}, []);
return <Child onMyClick={handleMyClick} />;
}
// 자식 컴포넌트
interface ChildProps {
onMyClick: () => void;
}
function Child({ onMyClick }: ChildProps) {
return <div onClick={onMyClick}>Click Me!</div>;
} 2. 시점 이동이 적어 코드가 더 직관적이다.너무 길지 않은 크기의 인라인 함수의 경우, 시점 이동이 적어 실제로 코드를 읽을 때 편하다는 장점이 있어요. 저는 위 2가지의 이유로 태그 내에서 인라인으로 화살표 함수를 사용하는 편입니다! |
Beta Was this translation helpful? Give feedback.
-
AI 토론 요약: 간단한 화살표 함수를 어떻게 처리할 것인가?리액트 컴포넌트에서 화살표 함수 사용 방식을 두고 성능, 가독성, 유지보수성을 중심으로 다양한 의견이 오갔어요.1. 질문
2. 성능 관점
3. 가독성과 유지보수성 관점
4. 함수 분리 기준
결론
개발 상황과 코드 스타일에 따라 유연하게 선택하는 것이 중요하다는 공통된 결론이 도출되었어요. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
다른 분들은 어떻게 코드 짜는지 궁금해서 질문남깁니다.
아래 코드는 렌더링 부분에 온클릭 함수를 바로 넣어놓은 코드입니다.
{() => setCount(count+1)}
리렌더링 될 때마다 위 함수를 새롭게 계속 생성하기 때문에 효울적이지 못하다고 합니다.
위 코드와 같이 함수를 빼주는 것이 좋다고 합니다.
지양글을 보고 Form 태그 개발 중 생긴 의문
원래 하던 방식
화살표 함수를 렌더링 부분에 사용하는 걸 지양하라는 글을 보고 난 후
처음에는 그냥 함수 빼주는게 번거롭지 않다고 생각했지만 form 태그의 onSubmit 부분을 작업하던 중에 이렇게까지 하면서 함수를 빼줘야할까? 라는 생각이 들어서 어떻게 하시는지 질문 남깁니다.
26 votes ·
Beta Was this translation helpful? Give feedback.
All reactions