react 는 왜 index 를 key 로 추천 하지 않 습 니까?
2.똑 같이 그들의 내용 을 계속 비교 하고 새로운 진실 dom 을 생 성하 여 교체 한다.
3.내용 과 key 가 같 으 면 낡은 진실 dom 을 재 활용 하여 변 하지 않 습 니 다.
그러면 우리 가 옮 겨 다 닐 때 자동 으로 생 성 된 index 를 각 노드 의 key 로 사용 하면 어떤 문제 가 발생 할 수 있 습 니까?다음은 작은 사례 를 드 리 겠 습 니 다.
우선,처음에 우 리 는 persons 를 옮 겨 다 녔 다.
그 는 이러한 과정,소스 데이터 일 것 이다.
persons: [
{ id: 1, name: “ ”, age: 15 },
{ id: 2, name: “ ”, age: 16 },
],
생 성 된 실제 dom 노드
<ul>
<li key="0"> --15</li>
<li key="1"> --16</li>
</ul>
그리고 우 리 는 이 명단 앞 에{id:3,name:'왕 오',age:14}의 데 이 터 를 삽입 하면 이렇게 됩 니 다.
<ul>
<li key="0"> --14</li>
<li key="1"> --15</li>
<li key="2"> --16</li>
</ul>
위의 업 데 이 트 를 통 해 왕 오 가 앞의 장 삼 의 키 를 점용 한 것 을 발견 할 수 있 습 니 다.그 러 니까 내 가 이 과정 을 업데이트 할 때 먼저 새로운 가상 dom.
<li key="0"> --14</li>
낡은 가상 dom
<li key="0"> --15</li>
새로운 dom 을 비교 할 때 먼저 key 두 사람 이 똑 같 습 니 다.비교 내용 중 하 나 는 왕 오 C14 이 고 하 나 는 장 삼 15 입 니 다.내용 에 변화 가 생 겼 습 니 다.이때 새로운 가상 dom 을 사용 하여 새로운 진짜 dom 을 생 성하 고 페이지 를 다시 렌 더 링 할 것 입 니 다.또한 예전 의 장 삼 이 영향 을 받 아 다시 생 성 해 야 합 니 다.뒤에 있 는 이사 도 장삼 에 의 해 교체 되 어 새로운 내용 을 장삼 의 진실 dom 으로 생 성 해 야 한다.그러면 모든 dom 이 다시 생 성 되 고 다시 렌 더 링 되 어 성능 이 떨어진다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/[email protected]/babel.js"></script>
<div id="root"></div>
<script type="text/babel">
let root = document.getElementById("root");
class App extends React.Component {
constructor(props) {
super(props);
}
state = {
persons: [
{ id: 1, name: " ", age: 15 },
{ id: 2, name: " ", age: 16 },
],
};
handle = () => {
const { persons } = this.state;
const p = {
id: 0,
name: " ",
age: 14,
};
this.setState({
persons: [p, ...persons],
});
};
render() {
return (
<div>
<button onClick={this.handle}> </button>
<ul>
{this.state.persons.map((person, index) => (
<li key={index}>
{person.name}--{person.age}
</li>
))}
</ul>
</div>
);
}
}
ReactDOM.render(<App name="hell" />, root);
</script>
</body>
</html>
위의 추 가 를 통 해 우리 가 id 를 유일한 key 값 으로 사용 하면 어떻게 될 지 생각해 보 세 요.업데이트 전
<ul>
<li key="1"> --15</li>
<li key="2"> --16</li>
</ul>
업데이트 후
<ul>
<li key="0"> --14</li>
<li key="1"> --15</li>
<li key="2"> --16</li>
</ul>
이번에 왕 오 가 삽입 한 것 은 장 삼 의 앞 이지 만 왕 오 와 위 에 똑 같은 key=0 의 노드 가 있 는 지 비교 한 결과 새로운 진실 dom 을 생 성하 지 않 고 렌 더 링 을 했 습 니 다.장 삼 과 위 에 key=1 의 노드 를 비교 한 결과 위 에 key=1 의 노드 가 있 는 것 을 발 견 했 습 니 다.그리고 그들의 내용 이 똑 같은 지 확인 한 다음 에 내용 도 똑 같 습 니 다.그러면 낡은 진실 dom 을 재 활용 하여 성능 을 절약 할 수 있다.여기 서 react 가 왜 index 를 key 로 추천 하지 않 는 지 에 관 한 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 react index 는 key 내용 으로 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
nginx 에서 사이트 아이콘 표시 설정전단 개발 환경: react:^16.4.1 webpack:^4.16.0 웹 팩 에 favicon. ico 설정 추가: nginx 는 ico 에 대한 지원 을 추가 합 니 다:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.