Я создал очень простое приложение и попытался понять, как ведет себя ключ в случае расширения PureComponent
и Component
.
Однако из того, что я обнаружил, кажется, что при расширении PureComponent,это то, что я ищу, используя ключ, просто пропустите обновление b и c, и, очевидно, имеет повышение производительности. Но при расширении Component кажется, что при использовании ключа выигрыша в производительности нет [я не знаю, как измерить производительность, здесь, мне кажется, только когда вызывается метод, он должен работать как минимум немного хуже, чем немногобольше кода выполнено].
Вот код, который я использую для тестирования:
import React, { Component, PureComponent } from "react";
class Child extends PureComponent {
render() {
return <div>{this.props.name}</div>;
}
componentDidMount() {
console.log("mount", this.props.name);
}
componentDidUpdate() {
console.log("update", this.props.name);
}
componentWillUnmount() {
console.log("unmount", this.props.name);
}
}
class App extends Component {
constructor(props) {
super(props);
this.state = {
list: ["a", "b", "c"],
};
}
render() {
return (
<div>
{this.state.list.map(name => {
return <Child key={name} name={name} />;
})}
</div>
);
}
componentDidMount() {
setTimeout(() => {
this.setState({
list: ["b", "c", "d"]
});
}, 1000)
}
}
Вот журнал для одного расширяющего PureComponent:
unmount a
mount d
ИВот журнал для расширения компонента:
unmount a
update b
update c
mount d
Итак, мой вопрос
При использовании с расширением компонента React.Component
, какова цель указания ключа? Может ли он иметь какой-либо прирост производительности, когда мы используем ключ в этом случае?