나는 상황을 설명하려고합니다. 나는 상태 객체의 배열이 구성 요소를 가지고 구성 요소는 우리가 이런 일이 objects.So 사람에 따라 다른 구성 요소를 렌더링 : 우리는 결과는 같을 것이다 상태에서 3 개 항목이 경우에 따라서구성 요소를 업데이트하는 대신 삭제하십시오.
class MainComponent extends React.Component {
render(){
return this.state.items.map((item) => {
return <AnotherComponent {...item} />)
}
}
}
을 이 :
<MainComponent>
<AnotherComponent item1 />
<AnotherComponent item2 />
<AnotherComponent item3 />
</MainComponent>
이제 상태를 조작 해 봅시다. 우리는 상태에서 마지막 요소를 제거 할 경우, 구성 요소는이로 다시 렌더링됩니다
<MainComponent>
<AnotherComponent item1 /> // nothing happens to this one
<AnotherComponent item2 /> // and to this one
// this element is deleted
</MainComponent>
을하지만 우리는 상태에서 첫 번째 요소를 제거하는 경우, 구성 요소는이로 다시 렌더링됩니다
<MainComponent>
<AnotherComponent item2 />
<AnotherComponent item3 />
</MainComponent>
항목 2은 실제로 항목 2 구성 요소가 아닙니다. 상품 1 상품 2 소품으로 다시 표시되는 상품 번호입니다. 그리고이 행동은 내 앱의 논리를 엉망으로 만든다. 이 문제를 피할 수있는 방법이 있습니까? 의 기본 로직 AnotherComponent이 componentDidMount 메소드에 있기 때문에 구성 요소가 실제로 필요한 방식으로 업데이트하지 않습니다. AnotherComponent 구성 요소가 채팅 할 수있는 채팅 앱이 있다고 상상해보십시오. componentDidMount 메서드가 실행되면 원격 서버에 연결되어 새 메시지를 가져옵니다. 이 논리는 한 번만 수행되기 때문에 상태 조작의 마지막 예제에서 설명한 것처럼 응용 프로그램 상태가 변경되면 (item1 대화방을 상태에서 삭제하고 응용 프로그램에서 item2를 열 때) 실제로 item1 대화방이 표시됩니다 방금 폐쇄 됐어. (이것은 내가 직면 한 문제와 매우 유사하다)
내가 쓴 것을 이해하기를 희망한다. 고맙습니다.
아 .. 이제 난을 참조하십시오. React는 나에게이 핵심 재산에 가치를 전달해야한다는 경고를 주었고, 그래서 나는 그 상태의 항목 색인을 전달했습니다. 고맙습니다 – harumando