React 의 가 변 값 을 자세히 설명 합 니 다.
함수 식 프로 그래 밍 이란 프로그램 안의 함수 와 표현 식 이 모두 수학 중의 함수 처럼 입력 값 을 정 하고 출력 이 확실 하 다 는 것 을 말한다.예 를 들 면
let a = 1;
let b = a + 1;
=> a = 1 b = 2;
변수 b 가 나타 납 니 다.변수 a 의 값 을 사 용 했 지만 a 의 값 을 수정 하지 않 았 습 니 다.우리 가 잘 아 는 react 의 코드 를 다시 보 세 요.this.state={count:1}을 초기 화 하면
componentDidMount() {
const newState = { ...state, count: 2 }; // { count: 2 }
this.setState(newState);
}
this.state 를 사 용 했 지만 this.state 의 인용 주 소 를 수정 하지 않 았 고 count 의 값 을 직접 수정 하지 않 았 습 니 다.this.props 에 대해 서도 마찬가지 입 니 다.가 변 값 을 왜 사용 합 니까?
React 홈 페이지 에서 세 가지 좋 은 점 을 드 립 니 다.
복잡 한 기능 을 간소화 하 다.
불변성 은 복잡 한 특성 을 더욱 쉽게 실현 시킨다.
추적 데이터 의 변화
데 이 터 를 직접 수정 하면 데이터 의 변 화 를 추적 하기 어렵다.데이터 의 변 화 를 추적 하려 면 가 변 대상 이 이전 버 전과 비교 할 수 있어 야 합 니 다.그러면 전체 대상 트 리 가 한 번 씩 옮 겨 다 녀 야 합 니 다.
가 변 적 이지 않 은 데이터 의 변 화 를 추적 하 는 것 은 상대 적 으로 훨씬 쉽다.대상 이 새로운 대상 이 된 것 을 발견 하면 대상 이 바 뀌 었 다 고 할 수 있다.
React 성능 최적화 불가 변수
class CounterButton extends React.Component {
constructor(props) {
super(props);
this.state = {count: 1};
}
shouldComponentUpdate(nextProps, nextState) {
if (this.props.color !== nextProps.color) {
return true;
}
if (this.state.count !== nextState.count) {
return true;
}
return false;
}
render() {
return (
<button
color={this.props.color}
onClick={() => this.setState(state => ({count: state.count + 1}))}>
Count: {this.state.count}
</button>
);
}
}
class App extends PureComponent {
state = {
items: [1, 2, 3]
}
handleClick = () => {
const { items } = this.state;
items.pop();
this.setState({ items });
}
render() {
return (
<div>
<ul>
{this.state.items.map(i => <li key={i}>{i}</li>)}
</ul>
<button onClick={this.handleClick}>delete</button>
</div>
)
}
}
위의 예 는 PureComponent 를 사 용 했 고 배열 items 의 값 만 바 꾸 었 을 뿐 items 의 참조 주 소 를 바 꾸 지 않 았 기 때문에 items 는 변화 가 없 으 며 render 함 수 를 촉발 하지 않 으 며 구성 요소 의 렌 더 링 을 촉발 하지 않 는 다 고 생각 합 니 다.구성 요소 업 데 이 트 를 실현 하려 면 다음 과 같은 방식 으로 새 배열 을 만 들 고 새 배열 의 주 소 를 items 에 부여 할 수 있 습 니 다.
handleClick = () => {
const { items } = this.state;
items.pop();
var newItem = [...items];
this.setState({ item: newItem });
}
(1)Immutable 은 만 들 면 변경 할 수 없 는 데이터 입 니 다.(2)Immutable 대상 에 대한 수정 이나 삭제 작업 을 추가 하면 새로운 Immutable 대상 을 되 돌려 줍 니 다.(3)Immutable 이 실현 하 는 원 리 는 Persistent Data Structure(지속 적 인 데이터 구조)이다.즉,영구적 인 데이터 가 새로운 데 이 터 를 만 들 때 오래된 데 이 터 를 동시에 사용 할 수 있 고 변 하지 않도록 해 야 한다.(4)또한 deepCopy 가 모든 노드 를 한 번 복사 해서 가 져 오 는 성능 손실 을 피하 기 위해 Immutable 은 Structural Sharing(구조 공유)을 사용 했다.즉,대상 트 리 의 노드 가 변화 하면 이 노드 와 그 영향 을 받 은 부모 노드 만 수정 하고 다른 노드 는 공유 하 는 것 이다.
마지막 으로 구성 요소 차원 에서 얕 은 비 교 를 하려 면 React.memo()함 수 를 사용 할 수 있 습 니 다.
총결산
사실은 홈 페이지 에서 말 하 는 불가 변성 의 세 번 째 장점 이자 가장 중요 한 장점 이다.바로 불가 변성 은 우리 가 React 에서 Pure Component 를 사용 하 는 데 도움 을 줄 수 있다 는 것 이다.데이터 가 바 뀌 었 는 지,구성 요소 가 언제 다시 렌 더 링 되 어야 하 는 지 쉽게 확인 할 수 있 습 니 다.
state 값 을 변경 하면 shouldComponentUpdate 에서 현재 state 와 nextState 를 가 져 오 거나 props 와 nextprops 가 비교 한 값 이 똑 같 으 면 false 로 돌아 갑 니 다.우리 가 setState 작업 을 하 더 라 도 UI 는 업데이트 되 지 않 습 니 다.
Pure Component 는 Immutable.js 와 함께 사용 하여 성능 최적화 의 목적 을 달성 하 는 것 이 좋 습 니 다.
React.memo 를 결합 하여 불필요 한 구성 요소 의 업데이트 렌 더 링 을 피 합 니 다.
이상 은 React 의 가 변 적 이지 않 은 값 에 대한 상세 한 내용 입 니 다.React 의 가 변 적 이지 않 은 값 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.