Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar
translation

这是AI翻译的帖子。

뚠뚠멍의 생각들

React - kakao is not defined 如何解決

  • 写作语言: 韓国語
  • 基准国家: 所有国家 country-flag

选择语言

  • 汉语
  • English
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar

durumis AI 总结的文章

  • 在 React 18 中,使用 create-react-app 環境與 Kakao 地圖 API 整合時,地圖無法渲染,這是因為 React 元件不直接存取全域物件。
  • React 為了封裝、效能、狀態管理等原因,不直接存取全域物件,並使用 Redux 等中央狀態管理程式庫來控制數據流。
  • 與 Vue 不同,React 在文件結構和 Hook 等方面給人一種自由的感覺,但對於初學者來說,反而可能會感到困難,建議透過玩具專案來熟悉。
  • 問題
  • 解決
  • 原因
  • 感想


問題

在 React 18, create-react-app 環境下,在連接 Kakao 地圖 API 的過程中,地圖沒有渲染!

我在 head 標籤中插入了腳本標籤,因此我認為瀏覽器會在渲染之前載入它。

**我寫了 html 代碼,但它沒有顯示出來!**

~大致上 index.html 的 head 標籤中載入 Kakao 地圖的代碼~

<!-- index.html -->
 
<head>
    <script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=%REACT_APP_API_KEY%&libraries=services,clusterer,drawing" id="map-lib"></script>
useEffect(() => {
    // 載入地圖    


然而,在 console 中,只記錄了 kakao is not defined,沒有渲染任何東西。


解決

基礎:React 的組件不會直接訪問全局對象。


解決方案 1-1

在組件函數之外從全局對象中提取 kakao 屬性並聲明它。

const { kakao } = window;

function Map() {
    //...


解決方案 1-2

將渲染 Kakao 地圖所需的函數寫入單獨的自定義鉤子中。

//hooks/useKakaoMap.js

const { kakao } = window;

function useKakaoMap() {
    const initializeMap = useCallback(() => {
        const container = document.getElementById('map');
        const options = {
        center: new kakao.maps.LatLng(33.450701, 126.570667),
            level: 3
        };
        const newMap = new kakao.maps.Map(container, options);
        setMap(newMap);
    }, []);

    //...    
    
    return {
        initializeMap
    }
}

export default useKakaoMap;

//Map.js

function Map() {
    
    const {
        initializeMap,
    } = useKakaoMap();
    
    useEffect(() => {
        initializeMap();
    }, [initializeMap]);
    
    
    return(
     <div id="map"></div>
    
    )
    


拖放事件、點擊事件、標記處理等一般的地圖必要功能,

與在組件中實現相比,

將其分為自定義鉤子在可重用性和可讀性方面更好。


原因

React 為什麼不訪問全局對象 - 需要了解 React 的概念。


1) 封裝和模組性

- 每個組件都應該是獨立的,並且可以重複使用。如果在無數個組件中依賴全局對象,就會失去獨立性,並且會變得非常複雜。


2) 性能和易於維護

- React 會在狀態發生變化時重新渲染,而全局對象不適合跟踪狀態變化。


3) 狀態管理集中於中心

- 但是,如果需要共享多個變數,請使用 Redux 等中央狀態管理庫。

集中-> 控制從中心到組件的數據流,以避免錯誤並使維護更容易。


* 服務器端渲染

最近,為了 SEO(搜索引擎優化),服務器端渲染被廣泛使用,但無法從服務器端訪問 window 對象!


感想

這是我在第一個 React 項目中遇到的試錯。

我用 Vue 做了兩年多的實務工作,但在開始 React 項目時,

我對無法顯示 Kakao 地圖感到非常困惑...!


與 Vue 相比,感覺文件結構和鉤子等比較自由,反而更難。

我一直在想如何有效地編寫它。

我應該像玩具項目一樣,多玩玩它,以便更好地理解它。


* 這是我的第一個博客,我覺得 두루미스 很特別也很有趣。

它還會做韓國人喜歡的 3 行總結 ㅋㅋ

我也可以遇到國外的開發者嗎?

我希望代碼編輯器能改進一下


歡迎交流意見和指正!

祝您度過愉快的一天!




뚠뚠멍
뚠뚠멍의 생각들
뚠뚠멍의 생각들
뚠뚠멍
CSS 的基本規則 (正常流程, BFC, IFC) 本文將說明 CSS 布局的基本概念,包括區塊元素、內聯元素、邊界、對齊,以及 BFC (區塊格式化上下文) 和 IFC (內聯格式化上下文)。我們將詳細探討 CSS 元素的正常流程、BFC 和 IFC 的特性,以及在不同情況下應用的方法。

2024年9月7日

韓國投資證券 API 開發試行錯誤記錄 這是一篇針對想要使用韓國投資證券 API 開發自動交易程式的開發者的部落格文章。 文章介紹了在開發過程中遇到的困難,例如帳戶開戶、模擬交易不支持、 Websockets 等,並提供解決方案,以及承接股票自動交易程式製作委託的內容。
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마
這是一篇針對想要使用韓國投資證券 API 開發自動交易程式的開發者的部落格文章。 文章介紹了在開發過程中遇到的困難,例如帳戶開戶、模擬交易不支持、 Websockets 等,並提供解決方案,以及承接股票自動交易程式製作委託的內容。
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마

2024年4月23日

[React Hook] useState 本文档详细介绍了 React 的 useState 钩子在重新渲染时重新渲染整个组件的原因、如何保持值以及内部实现结构。通过分析 ReactFiberHooks.js 代码,可以理解钩子的工作方式,并了解 mountState、updateState 和 rerenderState 函数的作用。
Sunrabbit
Sunrabbit
Sunrabbit
Sunrabbit

2024年3月14日

韓國投資證券 API 開發時遇到的困難 這篇部落格文章詳細介紹了在韓國投資證券 API 開發過程中遇到的困難以及解決方案。文章涵蓋了開戶、ISA 帳戶轉換、模擬投資不支持、WebSockets 實時數據接收、交易方法論理解等開發人員的經驗和技巧。
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마
這篇部落格文章詳細介紹了在韓國投資證券 API 開發過程中遇到的困難以及解決方案。文章涵蓋了開戶、ISA 帳戶轉換、模擬投資不支持、WebSockets 實時數據接收、交易方法論理解等開發人員的經驗和技巧。
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마

2024年4月23日

常見問題解答 두루미스 是一個提供自動翻譯、摘要、主題生成等多種功能的免費測試版服務。 目前,行動裝置不支持文章撰寫,評論、預約發布、舉報功能將在未來更新。
durumis official blog
durumis official blog
寫著「常見問題解答」的圖像
durumis official blog
durumis official blog

2024年1月24日

測試中。杜魯米斯?這是什麼 杜魯米斯 AI 的預覽不存在。
Jay LEE
Jay LEE
Jay LEE
Jay LEE

2024年4月6日

Flitter 1.0.0 發佈:取代 D3 的 svg 庫 Flitter 是一個幫助您在 Web 開發中輕鬆實現數據視覺化的庫。它提供聲明式代碼編寫和高級佈局計算功能,並且可以在 React 環境中輕鬆使用。請訪問官方文檔網站查看詳細的使用示例和說明。
Meursyphus
Meursyphus
Flitter 是一個幫助您在 Web 開發中輕鬆實現數據視覺化的庫。它提供聲明式代碼編寫和高級佈局計算功能,並且可以在 React 環境中輕鬆使用。請訪問官方文檔網站查看詳細的使用示例和說明。
Meursyphus
Meursyphus

2024年5月1日