모범 사례 및 패턴에 반응하여 코드 줄이기 - 2부

코드를 줄이기 위한 React 모범 사례 및 패턴에 대한 또 다른 기사가 있습니다. 자신만의 React 코드를 작성하기 전에 읽어보면 좋은 글입니다.






시간을 낭비하지 않고 코드를 줄이기 위한 몇 가지 모범 사례와 패턴을 살펴보겠습니다. 가장 일반적인 것부터 시작하겠습니다.

구성 요소에 자식 소품이 없으면 자동으로 닫히는 태그를 사용하세요.




잘못된 코드:



return <Component></Component>;




좋은 코드:



return <Component />;



jsx 요소 내부에 함수를 작성하지 마십시오.




잘못된 코드:



return (
  <div>
    <button
      onClick={() => {
        setCount(1);
        // ...
      }}
    >
      Click
    </button>
  </div>
);




좋은 코드:



const onClick = useCallback(() => {
  setCount(1);
  // ...
}, [deps]);

return (
  <div>
    <button onClick={onClick}>Click</button>
  </div>
);



여러 상태를 함께 업데이트해야 하는 경우 개체 상태를 사용합니다.



여러 setState 호출을 연속으로 사용하지 마십시오. 이것은 많은 불필요한 재렌더링으로 이어질 수 있는 일반적인 실수입니다. 단일 setState 호출을 사용하는 것이 좋습니다.


잘못된 코드:



const [count, setCount] = useState(0);
const [name, setName] = useState("");

const onClick = () => {
  setTimeout(() => {
    setName("John");
    setCount(count + 1);
  }, 1000);
};




좋은 코드:



const [state, setState] = useState({
  count: 0,
  name: "",
});

const onClick = () => {
  setTimeout(() => {
    setState((prevState) => ({
      ...prevState,
      name: "John",
      count: prevState.count + 1,
    }));
  }, 1000);
};


참고: React 18은 자동 일괄 처리를 추가하므로 반응 자체에서 여러 업데이트를 처리합니다.


styled-component를 사용하여 구성 요소의 스타일을 지정하십시오. 이는 JSX에서 CSS 작성을 피하는 좋은 방법이며 애플리케이션에 대한 CSS 설정을 피하는 데도 도움이 됩니다.



It's completely opinion based.




잘못된 코드:



return <div style={{ backgroundColor: "red" }}></div>;




좋은 코드:



const Container = styled.div`
  background-color: ${({ theme }) => theme.colors.background};
  padding: 1rem;
`;




더 나은 코드:



const getPrimaryColor = ({ theme }) => theme.colors.primary;
const getDefaultColor = ({ theme }) => theme.colors.secondary;

const Button = styled.button`
  background-color: ${getPrimaryColor};
  color: ${getDefaultColor};
`;


참고: 테마에서 색상 및 기타 스타일을 가져오고 스타일이 지정된 구성 요소에 전달하는 함수를 만듭니다. 이것은 또한 코드를 줄이는 데 도움이 됩니다.


클래스 기반 구성 요소를 피하고 대신 기능적 구성 요소를 사용하십시오.




잘못된 코드:



class Counter extends Component {
  constructor(props) {
    super(props);
    this.state = {
      count: 0,
    };
    this.onClick = this.onClick.bind(this);
  }

  onClick = () => {
    this.setState({
      count: this.state.count + 1,
    });
  };

  render() {
    return <button onClick>Click me</button>;
  }
}




좋은 코드:



const Counter = () => {
  const [count, setCount] = useState(0);
  const onClick = () => setCount(count + 1);
  return <button>Click me</button>;
};


참고: 기능 구성 요소는 개발 시간과 코드를 줄일 뿐만 아니라 생산 번들 크기도 줄입니다. 번들 크기를 거의 60%까지 줄입니다.


불필요한 재렌더링을 피하기 위한 React.memo.




잘못된 코드:



return (
  <ui>
    {items.map((item) => (
      <Component>{item}</Component>
    ))}
  </ui>
);




좋은 코드:



const MemoComponent = React.memo(Component);
return (
  <ui>
    {items.map((item) => (
      <MemoComponent>{item}</MemoComponent>
    ))}
  </ui>
);


참고: React.memo()를 현명하게 사용하십시오. 구성 요소가 종종 소품으로 다시 렌더링되는 메모를 사용하지 마십시오.


JSX ShortHand를 사용하십시오. 부울 변수를 전달하기 위해 JSX 속기를 사용하십시오.




잘못된 코드:



return <button disabled={true}>Submit</button>;




좋은 코드:



return <button disabled>Submit</button>;



if-else 문 대신 삼항 연산자를 사용하십시오.




잘못된 코드:



if (isLoading) {
  return <div>Loading...</div>;
} else {
  return <div>Data</div>;
}




좋은 코드:



return isLoading ? <div>Loading...</div> : <div>Data</div>;



switch 문 대신 object(Map)를 사용하십시오. 감속기에 대한 이전 기사에서 이미 동일한 내용을 언급했습니다.




잘못된 코드:



switch (props.type) {
  case "ADMIN":
    return <Admin />;
  case "USER":
    return <User />;
  default:
    return <NotFound />;
}




좋은 코드:



const componentMap = {
  ADMIN: Admin,
  USER: User,
  NOT_FOUND: NotFound,
};

const Component = componentMap[props.type];
return <Component />;




더 나은 코드:



const componentMap = {
  ADMIN: React.lazy(() => import("../components/Admin")),
  USER: React.lazy(() => import("../components/User")),
  NOT_FOUND: React.lazy(() => import("../components/NotFound")),
};

const Component = componentMap[props.type];
return <Component />;



이름으로 여러 소품을 구성 요소에 전달하는 대신 객체 구조 분해를 사용합니다.




잘못된 코드:



const { name, age, role } = props;
return (
  <>
    <Component name={name} age={age} role={role} />
  </>
);




좋은 코드:



return (
  <>
    <Component {...props} />
  </>
);



문자열을 구성 요소에 전달하지 않을 때는 중괄호가 필요하지 않습니다.




잘못된 코드:



return <Component name={"John"} />;




좋은 코드:



return <Component name="John" />;



구성 요소 사용자 정의 소품에 대해 className , 스타일 등과 같은 반응 요소 소품을 사용하지 마십시오.




잘못된 코드:



return (
  <Component style="bordered">
);




좋은 코드:



return (
  <Component variant="bordered">
);



div, span 등과 같은 html 요소 대신 조각을 사용하십시오.




잘못된 코드:



return (
  <div>
    <span>{props.name}</span>
    <span>{props.age}</span>
  </div>
);




좋은 코드:



return (
  <>
    <span>{props.name}</span>
    <span>{props.age}</span>
  </>
);



if 블록이 무언가를 반환하는 경우 else 블록을 사용하지 마십시오.




잘못된 코드:



if (props.name) {
  return <div>{props.name}</div>;
} else {
  return <div>No name</div>;
}




좋은 코드:



if (props.name) {
  return <div>{props.name}</div>;
}
return <div>No name</div>;



키 속성을 사용하지 않을 경우 div, span 등과 같은 Html 요소 대신 React.fragment를 사용하십시오.




잘못된 코드:



return (
  <container>
    {list.map((item) => (
      <div key={item.id}>
        <SomeComponent />
        <SomeAnotherComponent />
      </div>
    ))}
  </container>
);




좋은 코드:



return (
  <>
    {list.map((item) => (
      <React.Fragment key={item.id}>
        <SomeComponent />
        <SomeAnotherComponent />
      </React.Fragment>
    ))}
  </>
);


읽어주셔서 감사합니다 😊

질문이나 추가 사항이 있습니까? 댓글을 남겨주세요.


당신이하지 않은 경우 읽어야합니다













자세한 내용은 .


Github , , , Medium , Stackblitz에서 나를 잡아라.

좋은 웹페이지 즐겨찾기