현재 앱의 각 화면에는 AppLayout
구성 요소가 구현되어 있습니다.이 구성 요소는 body
및 header
소품이 필요합니다.일반적인 자식이지만 다른 루트 : 자식에서 다시 렌더링하고 다시 마운트하는 것을 피할 수 있습니까?
body
소품은 종종 매우 다르지만 (매우 복잡한) header
은 다양한 화면 사이에 반복되는 콘텐츠가 많습니다. 때로는 제목 텍스트가 변경됩니다.
현재 한 경로에서 다른 경로로 이동하면 전체 화면이 재 렌더링되고 유사한 콘텐츠가 주어지면 상당히 낭비적인 작업이됩니다. 두 개의 화면 사이에 공통 하위 구성 요소를 다시 렌더링하고 다시 마운트하는 것을 피할 수있는 방법이 있습니까? 라우팅 설정
의
예이 많이 보이는 나무에서 반복하는 방법을 보여줍니다.
<Route
exact
path='/user'
component={()=> {
return (<AppLayout
header={<AppHeader heading="Users"/>}
main={<UserList/>} />);
} />
<Route
exact
path='/user/new'
component={()=>{
return (<AppLayout
header={<AppHeader heading="Create user"/>}
main={<UserAccountAdd />} />);
} />
<Route
exact
path='/user/:userId'
component={({ match }) =>
return (<AppLayout
header={<AppHeader heading="User profile"/>}
main={<UserAccountInfo userId={match.params.userId}/>}
/>)
} />
AppHeader
구성 요소는 기본적으로
connected(div)
ReallyExpensiveFoo
ReallyExpensiveBar
<p>{this.props.title}</p>
은 기본적으로 내가 본 싶습니다처럼 보이는 제목 제목이 다시 마운트해야 렌더링 헤더의 <p>
태그입니다.
그 충고는 너무 일반적입니다. 기본적으로 일반적인 렌더링 최적화와이 경우에는 적용 할 수 없습니다. 또한 기능 구성 요소와 관련하여 약간 잘못되었습니다. 그들은 항상 다시 렌더링하지만, 이것은 대개 매우 싸기 때문에 그다지 중요하지 않습니다. DOM 작업 - 마운트 해제 및 마운트는 비용이 많이 듭니다. 그것이 내가 피하고 싶습니다. – oligofren
하지만 답변을 추가하는 동안 다시 장착하는 데 몇 가지 구체적인 사항을 추가 했으므로 조금 불만족 스러울 수 있습니다. :-) – oligofren
자세한 답변을 얻으려면 응용 프로그램 상태에 대한 더 깊은 지식이 필요합니다. 나중에 질문에 추가 된 예제는 기본적으로 브라우저 DOM에 많은 양의 DOM 노드를 유지하려고 함을 보여줍니다. 'style = {display : 'none'}'또는이 특별한 시점에 보이지 않아야하는'ReallyExpensive ...'컴포넌트의 루트 노드와 비슷한 것을 추가하면 쉽게 구현할 수 있습니다. 이 경우 DOM에 남아 있지만 보이지는 않습니다. 그러나 당신 말이 맞습니다. 귀하의 초기 질문은 일반적인 조언을 구하는 것처럼 보입니다. – Flying