NPM包@closetbox/react-places-autocomplete使用教程

阅读时长 14 分钟读完

前言

@closetbox/react-places-autocomplete是一个方便实现Google地图地址自动完成的React组件,可以快速为网站添加地址自动完成功能。在本篇文章中,我们将会详细介绍如何安装、配置、使用这个组件,帮助你快速地在你的项目里使用它。

安装和配置

首先,我们需要使用npm在我们的项目中安装@closetbox/react-places-autocompletereact-google-maps两个依赖包,可以使用以下命令在你的项目中安装:

安装完成后,我们需要在程序入口处引入react-google-maps的样式表,并将@closetbox/react-places-autocomplete组件进行配置,以便在应用中全局使用。

-- -------------------- ---- -------
------ ----- ---- --------
------ -------- ---- ------------
------ --------------
------ --- ---- --------
------ - ---------------- - ---- --------------------
------ ------------------- -
  -----------------
  ----------
- ---- ---------------------------------------

----- ------- - --------------------------------

----- ------- - -
  ------ --------------
--

----- ------------ - ------------------
  ------- --------
-----------------------

----------------
  ------------------
    -------------
      -----------------
      --------------
      -------------------------------
    -
      ---- --
    ---------------
  --------------------
  -------------------------------
--

上述代码中,我们首先引入react-google-mapsGoogleApiWrapper,并且将自己的Google Maps API key传给该组件作为参数。然后,我们将Autocomplete作为子组件嵌套在App组件中,这样我们就可以在整个应用中方便地调用自动完成组件。

Autocomplete组件的属性列表中,我们首先传入options选项,其值为一个对象,用来设置自动完成时返回的地址类型。在这里,我们使用(regions)表示自动完成结果为一个区域,例如州、省份等。然后,我们设置了debounce500以便减少请求次数并提高浏览器性能。最后,我们设置了highlightFirstSuggestiontrue,以便自动选中第一个推荐项。

使用方法

在上一节中,我们已经将@closetbox/react-places-autocomplete组件配置好了。现在,我们将学习如何在一个React组件中使用该组件,以便动态地为地址输入框添加自动完成功能。

-- -------------------- ---- -------
------ ------ - -------- - ---- --------
------ - ------- - ---- ------------
------ -
  -------------
  --------------
  ----------
  -------
- ---- --------------------
------ ------------------- -
  -----------------
  ----------
- ---- ---------------------------------------

----- -------------- - --------
  -------------
  -------------
------- -- -
  ----- --------- ----------- - ------------- -- ---------
  ----- ---------------- ------------------ - --------------- -- --------------

  ----- ------------ - ----- ----- -- -
    ----- ------- - ----- ------------------------
    ----- ------ - ----- ----------------------
    ------------------
    --------------------------
  --

  ------ -
    ---------- --------------- -----------------------------
      ------- ------------------------- --
      -------------------
        --------------- -- -------------------
        --------------------- -- --------------------------
        ----------------------- -- --------------
      -
        --- -------------- ------------ ----------------------- ------- -- -- -
          -----
            ------ ------------------- ------------ ----- -------- --- --

            -------- -- ----------------------

            --------------------------- -- -
              ----- ----- - -----------------
                - - ---------------- ---------- ------- --------- -
                - - ---------------- ------- ------- --------- --
              ------ -
                ----
                  -------------------------------------- - ----- ---
                  ------------------------
                -
                  ------------------------
                ------
              --
            ---
          ------
        --
      ---------------------
    ------------
  --
---

------ ------- ---------------

如上代码所示,我们可以使用useState来获取地址输入框中的值,并将其传递给value属性。当用户在该地址输入框中输入内容时,组件会实时获取该输入框的值并更新状态。当用户选择一个地址时,我们调用geocodeByAddressgetLatLng来获取该地址的经纬度,并将其用于在地图上放置一个Marker,以便用户方便地查看该地址。

PlacesAutocomplete组件中,我们使用了getInputPropsgetSuggestionItemProps来管理输入框和推荐项的样式和行为。这些方法是@closetbox/react-places-autocomplete 提供的一些便捷方法,可以简化我们的代码编写过程。

示例代码

我们在这里提供一个完整的示例代码,以方便理解组件的使用。同时,我们提供一个样式表在示例代码中使用,使样式更清晰:

-- -------------------- ---- -------
------ ------ - -------- - ---- --------
------ ---------------
------ - ---------- -------------- ------ - ---- --------------------
------ ------------------- -
  -----------------
  ----------
- ---- ---------------------------------------

----- -------------- - ------------------- -- -
  ----- --------- ----------- - -------------
  ----- ---------------- ------------------ - -----------------------

  ----- ------------ - ----- ----- -- -
    ----- ------- - ----- ------------------------
    ----- ------ - ----- ----------------------
    ------------------
    --------------------------
  --

  ------ -
    ---------- --------------- -----------------------------
      ------- ------------------------- --
      -------------------
        ---------------
        ---------------------
        -----------------------
      -
        --- -------------- ------------ ----------------------- ------- -- -- -
          ---- -----------------------
            ------
              -------------------
                ------------ ------ ------ -------- ----- ----- -- -----
                ---------- ---------------
              ---
            --
            ------- ------------- --------------------------
              ------
            ---------

            ---- --------------------------------------------
              -------- -- ----------------------
              --------------------------- -- -
                ----- ----- - -----------------
                  - -
                      ---------------- --------- ---- ---- ------
                      ------ -------
                      ------- ----------
                    -
                  - -
                      ---------------- ---------- ---- ---- ----
                      ------ -------- -- -- -------
                      ------- ----------
                    --

                ------ -
                  ----
                    -------------------------------------- -
                      ---------- -------------
                      ------
                    ---
                    ------------------------
                  -
                    -------------------------------------
                  ------
                --
              ---
            ------
          ------
        --
      ---------------------
    ------------
  --
---

------ ------- -------- ----- -
  ------ -
    ---- -------- ------ ------- ------- ------ ---
      ---------------
        --------- ---- -------- ---- --------- --
        -------------------- -------- ------- ------ -- ---
        ---------------------- -------- ------- ------ -- ---
        ---------------- -------- ------- ------ -- ---
      --
    ------
  --
-

样式表:

-- -------------------- ---- -------
----------- -
  -------- -----
  --------------- ----
  ---------------- -------
  ------------ -------
  ----------------- --------
  -------------- ----
  ------- - -----
  ---------- ------
  ------- -----
  -------- - -----
  --------- ---------
-

------------- -
  ------- -----
  ----------------- ------------
  ----- --
  ---------- -----
  ------- -----
  ------------- -----
  ----------- ---------- ----- ------------
  ---------- ------
-

------------------- -
  -------- -----
  ----------- - - - --- -------- ---- ---- -----
-

-------------- -
  ----------------- ------------
  ------- --- ----- -----
  -------------- ----
  ------ -----
  ------- --------
  ------- -----
  -------- - -----
  ----------- ---------- ----- ------------
-

-------------------- -
  ----------- - - - --- -------- ---- ---- -----
-

-------------------------------- -
  --------- ---------
  ---- -----
  ----------------- -----
  -------------- ----
  ------- --- ----- --------
  ----------- - --- --- ------- -- -- -----
  ----------- ----
  ------ -----
  -------- --
-

----------- -
  -------- ----
  ------- --------
  ------------ -----
-

----------------- -
  ----------------- -------- ---- ---- -----
-

总结

在这篇文章中,我们介绍了使用@closetbox/react-places-autocomplete组件实现网站地址自动完成的基本方法。我们首先学习了如何安装和配置这个组件,然后我们学习了如何在React组件中使用它,并通过一个示例代码详细地演示了其中的细节。希望这篇文章对你有所帮助,快快行动起来,为你的网站添加自动完成功能吧!

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60065f84238a385564ab6c71

纠错
反馈