Реагировать на обратный вызов useEffect в регистре с доступом к состоянию - PullRequest
0 голосов
/ 14 января 2020

Я создаю новый instacne компонента карты в хуке useEffect со вторым параметром [], поэтому он запускается только один раз.

После создания экземпляра я хочу зарегистрировать обратный вызов, который запускается, если пользователь взаимодействует с картой. Внутри этого обратного вызова я хочу получить доступ к состоянию моего компонента. Как я могу это сделать, не вызывая al oop? Если я не добавляю свое состояние ко второму параметру, состояние остается неизменным при каждом запуске обратного вызова (как и ожидалось), но если я добавляю его, я вызываю al oop.

export const Map = (props: any) => {
const [state, setState]: [MapState, any] = useGlobalState({
    id: 'MAP',
    initialValue: getInitialValue(initialized),
});

useEffect(() => {
    mapInstance = new mapFramework.Map(});
    mapInstance.on('move', () => {
        console.log(state);
    });
}, []);
}

1 Ответ

2 голосов
/ 14 января 2020

Вы можете использовать useRef

export const Map = (props: any) => {
const [state, setState]: [MapState, any] = useGlobalState({
    id: 'MAP',
    initialValue: getInitialValue(initialized),
});
const stateRef = useRef(state)

useEffect(()=>{
    stateRef.current = state
}, [state])

useEffect(() => {
    mapInstance = new mapFramework.Map(});
    mapInstance.on('move', () => {
        console.log(stateRef.current)
    });
}, []);
}
...