簡體   English   中英

React useEffect 鈎子注冊回調,可以訪問狀態

[英]React useEffect hook register callback with access to state

我正在使用第二個參數 [] 在 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);
    });
}, []);
}

您可以使用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)
    });
}, []);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM