Resium: как предотвратить перерисовку карты при любом изменении состояния?

У меня есть пример проекта Resium, который показывает карту. Я добавил простой onClick, который устанавливает какое-то состояние, которое нигде НЕ используется - я просто установил его. Тем не менее, это заставляет всю карту перерисовываться и мерцать, ЕСЛИ Я НЕ удалюterrainProvider. Пример (terrainProvider закомментирован), если вы двигаете/щелкаете мышью, весь пользовательский интерфейс Cesium мерцает и перерисовывает все. Я использую React 17, Resium 1.14.3 (Cesium 1.86.1). Есть идеи, что происходит?

      import React, { useState } from "react";
import { Cartesian3, Color } from "cesium";
import { Viewer, Entity } from "resium";
import * as Cesium from 'cesium';

export default function App() {
    const [currentPos, setCurrentPos] = useState(null);

    const handleMouseClick = (e, t) => {
        setCurrentPos("xxx");
    }

    return (
        <Viewer full
            onClick={handleMouseClick}
            onMouseMove={handleMouseClick}
            // terrainProvider={new Cesium.CesiumTerrainProvider({ url: 'https://api.maptiler.com/tiles/terrain-quantized-mesh-v2/?key=xxxxxxx' })}
        >
            <Entity
                name="Tokyo"
                position={Cartesian3.fromDegrees(139.767052, 35.681167, 100)}
                point={{ pixelSize: 10, color: Color.RED }}
            />
        </Viewer>
    );
}

1 ответ

Я предполагаю, что это. Неважно, чтоcurrentPosне используется в компоненте, все еще является частью состояния компонента, то компоненты перерисовываются. В каждом рендереterrainProviderprop получает новый экземпляр, так что это приводит к тому, что весьViewerперерисовывает тоже. Возможно, вы можете сохранить свой экземпляр как состояние в компоненте и не создавать новый каждый раз при повторном рендеринге компонента.

Другие вопросы по тегам