[英]Trigger usePosition() custom hook onClick element
當我嘗試在onClick
事件中觸發usePosition掛鈎時,我遇到了一些麻煩。
我想要實現的是延遲瀏覽器觸發的地理定位權限提示,直到用戶單擊某個元素。
到目前為止,我嘗試過的是以下代碼的一堆變體,但沒有成功:
const IndexPage = () => {
const [geolocation, setGeolocation] = useState({});
const [isGeolocationActive, triggerGeolocation] = useState(false);
let currentPosition = usePosition();
function handleGeolocation() {
if (isGeolocationActive) {
setGeolocation(currentPosition)
console.log('geolocation', geolocation)
} else triggerGeolocation(true);
}
return (
<Layout>
<Wrapper type={`list`} classNames={`wrapper pet__cards cards__list`}>
<Card>
<Image/>
<div onClick={() => handleGeolocation()}>Click me to share my location</div>
我試圖設置一個useState
鈎子(最初設置為 false),如果設置為 true,它應該控制和處理usePosition
鈎子,但瀏覽器在我登陸頁面后仍然要求地理定位許可。
編輯:我還嘗試將usePosition
掛鈎放在另一個組件中,並將其稱為onClick
事件。 但是,在這種情況下,我面臨一些鈎子規則錯誤,例如:
“無效的鈎子調用。只能在 function 組件的主體內部調用鈎子。這可能由於以下原因之一發生......”
最后,我在另一個組件中使用usePosition
鈎子解決了這個問題,如下所示:
import React from "react";
import {usePosition} from "use-position";
const Geolocation = () => {
let currentPosition = usePosition();
return (
<div>
<p>{currentPosition.latitude}</p>
</div>
)
};
export default Geolocation;
在我的主要組件中,我使用了一個useState
鈎子來控制渲染,如下所示:
const IndexPage = () => {
const [geolocation, setGeolocation] = useState('');
function handleGeolocation() {
setGeolocation(<Geolocation/>);
}
return (
<Layout>
<Card>
<Image/>
<div onClick={() => handleGeolocation()}>Click me to share my location</div>
{geolocation}
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.