ReactJS 구성 요소를 작성할 때 자식 구성 요소가 잠시 동안 상태를 잃어 버리는 것을 발견했습니다. 자식 구성 요소가 다른 렌더링 함수로 렌더링되면 발생합니다.ReactJS 자식 구성 요소가 다른 함수로 렌더링 될 때 상태가 손실 됨
즉
부모 구성 요소는 신체의 하위 구성 요소를 렌더링 또는 헤더 중 어느 하나 때문에 다양한 조건에 2 서브 렌더링 기능을 가지며. somethingHappens
는 그것이 ChildComponent
을 렌더링하는 다른 렌더링 함수를 사용하는 것을 의미
...
renderInHeader =() => (<Header><ChildComponent /></Header>);
renderInBody =() => (<Body><ChildComponent /><Body>);
render =() => {
if (somethingHappens) {
return this.renderInHeader();
}
return this.renderInBody();
}
...
.
그러면 ChildComponent
은 상태를 잃게됩니다. (아이 컴퍼넌트 상태가 리 셋트됩니다). 나는 그런 일이 왜 이해
, 나는 실제로 아이의 상태가 더 자주 재설정되지 않는 약간 놀랐어요 (즉 재설정 할 때마다 부모 노드를 다시 렌더링).
그러나 이상적인 해결책은 무엇입니까?
하위 구성 요소에서 상태를 사용하지 마십시오? (안전성이 보장되지 않았기 때문에)
key=
을 ChildComponent에 지정하면 다시 렌더링하는 동안 독립 노드로 처리 될 수 있습니까? (key
이 매퍼 외부에서 작동하는지 확실하지 않음)ref
을 사용 하시겠습니까? (그런 식으로 작동하는지 전혀 모른다)반응 16에서 새로운 "Portal"을 사용 하시겠습니까? 내가
Header
및Body
에 대한 변수를 사용할 수 있습니다 알고, 그래서 하나의 기능이 필요한 렌더링있다 :
주 (아직 시도하지 않은). 그러나 실제 사례는 더 복잡 할 수 있으며 여러 영역에 여러 하위 구성 요소가 분산되어있을 수 있습니다. 여기 즉
...
renderInBody =() => (
<Body>
<Header>
<ChildComponent1 />
<ChildComponent2 />
</Header>
<ChildComponent3 />
</Body>
);
renderInHeader =() => (
<Header>
<ChildComponent3 />
<ChildComponent1 />
<Body>
<ChildComponent2 />
</Body>
</Header>
);
render =() => {
if (somethingHappens) {
return this.renderInHeader();
}
return this.renderInBody();
}
...
, 아이 컴포넌트 1,2,3 정말 변경되지 않습니다, 단지 자신의 위치와 부모의 구조가 변경됩니다.
그리고 하위 구성 요소 위치 지정 전략을 Header
및 Body
구성 요소에 넣는 것이 좋은 해결책이라고 생각하지 않습니다.
ChildComponent의 상태를 유지할 수 있습니까?
하위 구성 요소의 상태를 유지 관리 하시겠습니까? –