Refactoring React: 경로 기능을 통한 페이지 경로 관리
8320 단어 refactoringjavascriptreact
// a component used across the app
import { settingsRoute } from 'app/routes'
export cons OrderDescription = () => {
const order = useOrder()
return (
<ul>
{order.products.map(product => (
<li key={product.sku}>
<Link href={`/collections/${product.collectionId}/products/${product.id}`}>
{product.name}
</Link>
</li>
)}
</ul>
)
}
이 경우
OrderDescription
구성 요소는 제품 페이지에 대한 경로를 만들고 Link
에 값을 전달합니다.href
재산.반면에 제품 페이지는 경로에서 컬렉션 식별자와 제품 식별자를 모두 받았습니다.
// /pages/product.js
export const ProductPage = () => {
const { collectionId, productId } = useParams()
const product = useProduct(collectionId, productId)
return (
<div />
)
}
여기서 문제는
OrderDescription
가 ProductPage
구성 요소에 대한 URL 경로를 빌드하는 방법을 알아야 한다는 것입니다. 실제로 제품 페이지에 대한 리디렉션 링크를 생성하는 모든 페이지는 이 페이지에 대한 경로를 구축하는 방법을 알아야 합니다.이런 냄새를 산탄총 수술이라고 합니다. 동일한 지식이 애플리케이션을 통해 서로 다른 위치에 배치될 때 발생하며 각 업데이트는 소스 코드 전체에 퍼져 있는 지식을 변경해야 합니다.
이 예에서 제품 페이지의 매개변수를 변경해야 하는 경우 제품 페이지에 대한 링크를 생성하는 모든 위치를 변경해야 합니다.
이 냄새를 처리하는 한 가지 방법은 제품 링크 구축에 대한 지식을 캡슐화하는 클래스 또는 함수를 만드는 것입니다.
첫 번째 단계는 추상화를 선택하는 것입니다. 이 게시물에서는 함수를 사용하여 페이지 경로를 빌드합니다.
// /pages/product.js
export const productPath = product =>
`/collections/${product.collectionId}/products/${product.id}`
export const ProductPage = () => {
const { collectionId, productId } = useParams()
const product = useProduct(collectionId, productId)
return (
<div />
)
}
이제 제품 페이지 경로를 빌드하는 모든 위치를 업데이트하고 제품을 인수로 전달하는 함수
productPath
를 호출하여 교체할 수 있습니다.export cons OrderDescription = () => {
const order = useOrder()
return (
<ul>
{order.products.map(product => (
<li key={product.sku}>
<Link href={productPath(product)}>
{product.name}
</Link>
</li>
)}
</ul>
)
}
리팩토링을 만드는 동안 주의를 기울이고 테스트를 계속 실행해야 합니다. 리팩토링 중에 동작을 변경하지 않는 것이 중요합니다. 모든 것이 녹색이면 코드를 커밋합니다.
결론
경로 함수를 사용하여 외부 매개변수를 기반으로 경로 링크를 생성하는 동작을 캡슐화할 수 있습니다. 우리는 해당 경로 매개변수의 소비자를 활용하여 해당 페이지에 대한 경로를 구축하는 방법을 설명하고 이를 통해 애플리케이션 전체에서 지식이 누출되는 것을 방지합니다.
URL 경로를 통해 페이지에 대한 참조를 빌드하는 곳이 한 곳뿐이라 하더라도 함수 호출을 읽는 것이 문자열을 정신적으로 빌드하고 보간하는 것보다 독자가 무슨 일이 일어나고 있는지 이해하는 것이 훨씬 더 쉽기 때문에 이 리팩토링을 제안합니다.
Reference
이 문제에 관하여(Refactoring React: 경로 기능을 통한 페이지 경로 관리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/gustavofsantos/refactoring-react-manage-page-paths-through-path-functions-2dk0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)