{"id":21380,"date":"2023-05-05T07:43:13","date_gmt":"2023-05-05T04:13:13","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/how-to-validate-ship-address-in-the-usa-using-reactjs-2g5g\/"},"modified":"2023-05-05T07:43:13","modified_gmt":"2023-05-05T04:13:13","slug":"how-to-validate-ship-address-in-the-usa-using-reactjs-2g5g","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/how-to-validate-ship-address-in-the-usa-using-reactjs-2g5g\/","title":{"rendered":"\u0646\u062d\u0648\u0647 \u062a\u0623\u06cc\u06cc\u062f \u0627\u0639\u062a\u0628\u0627\u0631 \u0622\u062f\u0631\u0633 \u06a9\u0634\u062a\u06cc \u062f\u0631 \u0627\u06cc\u0627\u0644\u0627\u062a \u0645\u062a\u062d\u062f\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 ReactJS"},"content":{"rendered":"<div data-article-id=\"1457822\" id=\"article-body\">\n<p>\u0628\u0631\u0627\u06cc \u062a\u0623\u06cc\u06cc\u062f \u0627\u0639\u062a\u0628\u0627\u0631 \u06cc\u06a9 \u0622\u062f\u0631\u0633 \u062d\u0645\u0644 \u0648 \u0646\u0642\u0644 \u062f\u0631 \u0627\u06cc\u0627\u0644\u0627\u062a \u0645\u062a\u062d\u062f\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 React \u0648 Google Maps Geocoding API\u060c \u0627\u06cc\u0646 \u0645\u0631\u0627\u062d\u0644 \u0631\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f:<\/p>\n<p>\u0628\u0631\u0627\u06cc \u06cc\u06a9 \u06a9\u0644\u06cc\u062f Google Maps API \u062b\u0628\u062a \u0646\u0627\u0645 \u06a9\u0646\u06cc\u062f: <\/p>\n<p>\u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f <code>@googlemaps\/google-maps-services-js<\/code> \u0628\u0633\u062a\u0647:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>yarn add @googlemaps\/google-maps-services-js\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u06cc\u06a9 \u0645\u0624\u0644\u0641\u0647 React \u062c\u062f\u06cc\u062f \u0628\u0631\u0627\u06cc \u0641\u0631\u0645 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0622\u062f\u0631\u0633 \u062e\u0648\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>\/\/ AddressValidationForm.js\nimport React, { useState } from 'react';\nimport { Client } from '@googlemaps\/google-maps-services-js';\n\nconst AddressValidationForm = () =&gt; {\n  const [address, setAddress] = useState('');\n  const [validationMessage, setValidationMessage] = useState('');\n\n  const validateAddress = async () =&gt; {\n    const client = new Client();\n    try {\n      const response = await client.geocode({\n        params: {\n          address: address,\n          components: 'country:US',\n          key: 'YOUR_API_KEY',\n        },\n      });\n\n      if (response.data.status === 'OK') {\n        const formattedAddress = response.data.results[0].formatted_address;\n        setValidationMessage(`Valid address: ${formattedAddress}`);\n      } else {\n        setValidationMessage('Invalid address');\n      }\n    } catch (error) {\n      console.error(error);\n      setValidationMessage('Error occurred while validating the address');\n    }\n  };\n\n  return (\n    &lt;div&gt;\n      &lt;input\n        type=\"text\"\n        placeholder=\"Enter address\"\n        value={address}\n        onChange={(e) =&gt; setAddress(e.target.value)}\n      \/&gt;\n      &lt;button onClick={validateAddress}&gt;Validate Address&lt;\/button&gt;\n      &lt;p&gt;{validationMessage}&lt;\/p&gt;\n    &lt;\/div&gt;\n  );\n};\n\nexport default AddressValidationForm;\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u06a9\u0644\u06cc\u062f API \u0631\u0627 \u06a9\u0647 \u0627\u0632 Google Cloud Platform \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u062f\u0647\u200c\u0627\u06cc\u062f\u060c \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u00abYOUR_API_KEY\u00bb \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a AddressValidationForm \u0631\u0627 \u062f\u0631 \u062c\u0632\u0621 \u0627\u0635\u0644\u06cc React \u062e\u0648\u062f \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f \u0648 \u0622\u0646 \u0631\u0627 \u062f\u0631 JSX \u062e\u0648\u062f \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>import React from 'react';\nimport AddressValidationForm from '.\/AddressValidationForm';\n\nconst App = () =&gt; {\n  return (\n    &lt;div&gt;\n      &lt;h1&gt;Address Validation&lt;\/h1&gt;\n      &lt;AddressValidationForm \/&gt;\n    &lt;\/div&gt;\n  );\n};\n\nexport default App;\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06a9\u0646\u0648\u0646\u060c \u0628\u0631\u0646\u0627\u0645\u0647 React \u0634\u0645\u0627 \u062f\u0627\u0631\u0627\u06cc \u06cc\u06a9 \u0641\u0631\u0645 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a \u06a9\u0647 \u0622\u062f\u0631\u0633 \u062d\u0645\u0644 \u0648 \u0646\u0642\u0644 \u062f\u0631 \u0627\u06cc\u0627\u0644\u0627\u062a \u0645\u062a\u062d\u062f\u0647 \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Google Maps Geocoding API \u062a\u0623\u06cc\u06cc\u062f \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0627\u06af\u0631 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0627\u0632 React + React Hook Form + Zod \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<p>\u0628\u0633\u062a\u0647 \u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>yarn add zod react-hook-form\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u06cc\u06a9 \u0637\u0631\u062d \u062c\u062f\u06cc\u062f Zod \u0628\u0631\u0627\u06cc \u0627\u0639\u062a\u0628\u0627\u0631 \u0633\u0646\u062c\u06cc \u0622\u062f\u0631\u0633 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>\/\/ validation.js\nimport { z } from 'zod';\n\nconst AddressValidationSchema = z.object({\n  street: z.string().nonempty('Street is required'),\n  city: z.string().nonempty('City is required'),\n  state: z.string().nonempty('State is required'),\n  zip: z\n    .string()\n    .nonempty('Zip code is required')\n    .regex(\/^\\d{5}(-\\d{4})?$\/, 'Zip code is invalid'),\n});\n\nexport default AddressValidationSchema;\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u06cc\u06a9 \u0645\u0624\u0644\u0641\u0647 React \u062c\u062f\u06cc\u062f \u0628\u0631\u0627\u06cc \u0641\u0631\u0645 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0622\u062f\u0631\u0633 \u062e\u0648\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>\/\/ AddressValidationForm.js\nimport React from 'react';\nimport { useForm } from 'react-hook-form';\nimport { zodResolver } from '@hookform\/resolvers\/zod';\nimport AddressValidationSchema from '.\/validation';\n\nconst AddressValidationForm = () =&gt; {\n  const {\n    register,\n    handleSubmit,\n    formState: { errors },\n  } = useForm({\n    resolver: zodResolver(AddressValidationSchema),\n  });\n\n  const onSubmit = (data) =&gt; {\n    \/\/ Perform address validation or submit data\n    console.log(data);\n  };\n\n  return (\n    &lt;form onSubmit={handleSubmit(onSubmit)}&gt;\n      &lt;div&gt;\n        &lt;label htmlFor=\"street\"&gt;Street:&lt;\/label&gt;\n        &lt;input id=\"street\" type=\"text\" {...register('street')} \/&gt;\n        {errors.street &amp;&amp; &lt;p&gt;{errors.street.message}&lt;\/p&gt;}\n      &lt;\/div&gt;\n\n      &lt;div&gt;\n        &lt;label htmlFor=\"city\"&gt;City:&lt;\/label&gt;\n        &lt;input id=\"city\" type=\"text\" {...register('city')} \/&gt;\n        {errors.city &amp;&amp; &lt;p&gt;{errors.city.message}&lt;\/p&gt;}\n      &lt;\/div&gt;\n\n      &lt;div&gt;\n        &lt;label htmlFor=\"state\"&gt;State:&lt;\/label&gt;\n        &lt;input id=\"state\" type=\"text\" {...register('state')} \/&gt;\n        {errors.state &amp;&amp; &lt;p&gt;{errors.state.message}&lt;\/p&gt;}\n      &lt;\/div&gt;\n\n      &lt;div&gt;\n        &lt;label htmlFor=\"zip\"&gt;Zip:&lt;\/label&gt;\n        &lt;input id=\"zip\" type=\"text\" {...register('zip')} \/&gt;\n        {errors.zip &amp;&amp; &lt;p&gt;{errors.zip.message}&lt;\/p&gt;}\n      &lt;\/div&gt;\n\n      &lt;button type=\"submit\"&gt;Validate Address&lt;\/button&gt;\n    &lt;\/form&gt;\n  );\n};\n\nexport default AddressValidationForm;\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a AddressValidationForm \u0631\u0627 \u062f\u0631 \u062c\u0632\u0621 \u0627\u0635\u0644\u06cc React \u062e\u0648\u062f \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f \u0648 \u0622\u0646 \u0631\u0627 \u062f\u0631 JSX \u062e\u0648\u062f \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>import React from 'react';\nimport AddressValidationForm from '.\/AddressValidationForm';\n\nconst App = () =&gt; {\n  return (\n    &lt;div&gt;\n      &lt;h1&gt;Address Validation&lt;\/h1&gt;\n      &lt;AddressValidationForm \/&gt;\n    &lt;\/div&gt;\n  );\n};\n\nexport default App;\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06a9\u0646\u0648\u0646\u060c \u0628\u0631\u0646\u0627\u0645\u0647 React \u0634\u0645\u0627 \u062f\u0627\u0631\u0627\u06cc \u0641\u0631\u0645\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0648\u0631\u0648\u062f\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0622\u062f\u0631\u0633 \u062d\u0645\u0644 \u0648 \u0646\u0642\u0644 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0637\u0631\u062d Zod \u0648 react-hook-form \u062a\u0623\u06cc\u06cc\u062f \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0628\u0647 \u062e\u0627\u0637\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Google Maps API \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0628\u0633\u062a\u0647 \u0628\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0634\u0645\u0627 \u0647\u0632\u06cc\u0646\u0647 \u0647\u0627\u06cc\u06cc \u0631\u0627 \u0628\u0647 \u0647\u0645\u0631\u0627\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f.  \u0647\u0645\u0686\u0646\u06cc\u0646 API \u0647\u0627\u06cc \u062f\u06cc\u06af\u0631\u06cc \u0646\u06cc\u0632 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u0622\u0646\u0647\u0627 \u0628\u0631\u0627\u06cc \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0622\u062f\u0631\u0633 \u0647\u0627\u06cc \u062d\u0645\u0644 \u0648 \u0646\u0642\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f\u060c \u0645\u0627\u0646\u0646\u062f USPS Web Tools API\u060c SmartyStreets \u06cc\u0627 EasyPost.  \u0645\u0637\u0645\u0626\u0646 \u0634\u0648\u06cc\u062f \u06a9\u0647 \u0627\u0633\u0646\u0627\u062f \u0645\u0631\u0628\u0648\u0637\u0647 \u0648 \u0642\u06cc\u0645\u062a \u0622\u0646\u0647\u0627 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0628\u0647\u062a\u0631\u06cc\u0646 \u0645\u0646\u0627\u0633\u0628 \u0628\u0631\u0627\u06cc \u0646\u06cc\u0627\u0632\u0647\u0627\u06cc \u062e\u0648\u062f \u0631\u0627 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u06cc\u062f. <\/p>\n<p>\u0628\u0647 GDPL \u0647\u0645 \u0641\u06a9\u0631 \u06a9\u0646\u06cc\u062f \ud83d\ude09<\/p>\n<p>\u0645\u0642\u0627\u0644\u0647 \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 ChatGPT (OpenAI) \u062a\u0648\u0633\u0637 \u0645\u0646 \u0628\u0631\u0631\u0633\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a \ud83d\ude09<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0628\u0631\u0627\u06cc \u062a\u0623\u06cc\u06cc\u062f \u0627\u0639\u062a\u0628\u0627\u0631 \u06cc\u06a9 \u0622\u062f\u0631\u0633 \u062d\u0645\u0644 \u0648 \u0646\u0642\u0644 \u062f\u0631 \u0627\u06cc\u0627\u0644\u0627\u062a \u0645\u062a\u062d\u062f\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 React \u0648 Google Maps Geocoding API\u060c \u0627\u06cc\u0646 \u0645\u0631\u0627\u062d\u0644 \u0631\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f: \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u06a9\u0644\u06cc\u062f Google Maps API \u062b\u0628\u062a \u0646\u0627\u0645 \u06a9\u0646\u06cc\u062f: \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f @googlemaps\/google-maps-services-js \u0628\u0633\u062a\u0647: yarn add @googlemaps\/google-maps-services-js \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f \u06cc\u06a9 \u0645\u0624\u0644\u0641\u0647 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":21381,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-21380","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/21380","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=21380"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/21380\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/21381"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=21380"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=21380"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=21380"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}