微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于将数据附加到 Google Sheet 的 React 组件可在 PC 上运行,但不适用于 iOS 或 Android

如何解决用于将数据附加到 Google Sheet 的 React 组件可在 PC 上运行,但不适用于 iOS 或 Android

我有一个带有以下组件的 React 应用程序,用于将行附加到 Google 表格。该组件在运行 Windows 10 的 PC 上完美运行。在我的 iPad 和 Pixel 3 上,当我单击“登录”时,我会看到 Google 登录屏幕,但是当我单击“保存”以执行 API 调用以进行追加时,没有任何反应。我在调试中使用了警报来确定正在调用 execute() 函数。但它不会附加数据或到达 .then 块。帮助!

import React,{ useState,useEffect } from "react"
import { get } from "../helpers/localStorage"

const SPREADSHEET_ID = process.env.REACT_APP_GOOGLE_SHEETS_ID
const CLIENT_ID = process.env.REACT_APP_CLIENT_ID
const API_KEY = process.env.REACT_APP_GOOGLE_SHEETS_API_KEY
const ScopE = "https://www.googleapis.com/auth/spreadsheets"

export default function AddGuestToGoogleSheet() {
  const [state,setState] = useState({ gapi: null })
  let ghinNumber = get("ghinNumber")
  let guests = get("guests")

  useEffect(() => {
    require("google-client-api")().then((gapi) => {
      setState({ gapi: gapi })
    })
  },[state.gapi])

  function handleSignInClick() {
    if (state.gapi !== null) {
      authenticate().then(loadClient)
    }
  }

  function handleSaveClick() {
    if (state.gapi !== null) {
      execute()
    }
  }

  function authenticate() {
    return state.gapi.auth2
      .getAuthInstance()
      .signIn({
        scope: ScopE,})
      .then(
        function () {
          console.log("Sign-in successful")
        },function (err) {
          console.error("Error signing in",err)
        }
      )
  }
  function loadClient() {
    state.gapi.client.setApiKey(API_KEY)
    return state.gapi.client
      .load("https://sheets.googleapis.com/$discovery/rest?version=v4")
      .then(
        function () {
          console.log("GAPI client loaded for API")
        },function (err) {
          console.error("Error loading GAPI client for API",err)
        }
      )
  }

  // Make sure the client is loaded and sign-in is complete before calling this method.
  function execute() {
    return state.gapi.client.sheets.spreadsheets.values
      .append({
        spreadsheetId: SPREADSHEET_ID,range: ghinNumber + "!A1:A3",includeValuesInResponse: true,insertDataOption: "INSERT_ROWS",responseDateTimeRenderOption: "FORMATTED_STRING",responseValueRenderOption: "UNFORMATTED_VALUE",valueInputoption: "RAW",resource: {
          values: guests,},})
      .then(
        function (response) {
          localStorage.removeItem("guests")
          document.location = "/settings/logout"
          // Handle the results here (response.result has the parsed body).
          console.log("Response",response)
        },function (err) {
          console.error("Execute error",err)
        }
      )
  }

  if (state.gapi !== null) {
    state.gapi.load("client:auth2",function () {
      state.gapi.auth2.init({
        client_id: CLIENT_ID,})
    })
  }

  return (
    <>
      <div className="div--center div--bordered">
        <h4>
          To save your guest(s) to your table
          <br />
          of players in Google Sheets
        </h4>
        <button className="button" onClick={handleSignInClick}>
          Sign In
        </button>
        <span className="span_then--bold"> then </span>
        <button className="button" onClick={handleSaveClick}>
          Save
        </button>
        <br />
        <br />
      </div>
    </>
  )
}

解决方法

解决方案是在 handleSignInClick 中“authenticate()”,然后在 handleSaveClick 中“loadClient().then(execute)”。这适用于我的 PC、iPad 和 Pixel 3。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?