我正在使用第二个参数[]在useEffect挂钩中创建一个地图组件的新实例,因此它只能运行一次。
创建实例后,我要注册一个回调,如果用户与地图进行交互,则会触发该回调。在此回调中,我想访问组件的状态。我该怎么做而不引起循环?如果我不将状态添加到第二个参数,则每次运行回调时状态都将保持不变(如预期的那样),但是如果添加它,则会导致循环。
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);
});
}, []);
}
答案 0 :(得分:2)
您可以使用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)
});
}, []);
}