У меня есть компонент MapBox, который получает данные от родительского компонента.
Я стараюсь не обновлять компонент каждый раз, когда в родительском компоненте происходит изменение состояния.Даже еслиComponentUpdate регистрирует те же реквизиты, он обновляет ...
Карта дочернего элемента
componentDidMount(){
if(this.props.data.features !== null){
this.fetchMap();
}
}
shouldComponentUpdate(nextProps) {
console.log('now:', this.props.data)
console.log('next', nextProps.data)
if (this.props.data === nextProps.data) {
return false;
}
if (this.props.data !== nextProps.data) {
return true;
}
return false;
}
componentDidUpdate(prevProps) {
if (this.props.data !== prevProps.data) {
this.fetchMap();
}
}
fetchMap() {
const { data } = this.props
const map = new mapboxgl.Map({
container: this.mapContainer,
style: 'mapbox://styles/mapbox/light-v9',
center: [8.32, 60.44],
zoom: 5,
})
map.on('load', () => {
map.addSource('locations', {
type: 'geojson',
data
});
});
}
.... render and return bla bla
Родитель:
const Parent () => {
const [state, change] = useState(false)
return (
<Button onClick={change(!state)}>Sorter</Button> // click and <Map> rerenders
<Map setDraw={setDraw} data={geojson} />
)
}