繁体   English   中英

在 Google Sheets 边栏中使用 React Hooks 时出错(Google Apps Script)

[英]Error using React Hooks In Google Sheets Sidebar (Google Apps Script)

我在 Google Sheets 边栏(Google Apps Script)中使用 React Hooks。 侧边栏有四个按钮,单击其中任何一个按钮都会使侧边栏显示 Google 表格中当前活动的单元格。

在此处输入图片说明

我在浏览器控制台中收到以下错误:

未捕获的类型错误:serverFunctions[functionName] 不是 handleRequest 处的函数

奇怪的是侧边栏按预期工作:当单击任何按钮时,当前单元格的 activeRange 按预期显示在侧边栏中。 所以我想知道这个错误是从哪里来的。 我什至尝试将功能console.log(serverfunctions.getActiveRangeA1)和功能显示在控制台中!

serverFunctions.getActiveRangeA1: function () { for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; }

为什么会出现错误?

可重现的例子

我基本上只是在测试这个很棒的包https://github.com/enuchi/React-Google-Apps-Script/

我从中创建了一个 git fork,因此您可以复制错误: https : //github.com/nykanenj/React-Google-Apps-Script

git clone https://github.com/nykanenj/React-Google-Apps-Script.git
cd React-Google-Apps-Script
npm install
npm run login
npm run setup
npm run deploy

现在在浏览器中打开由 npm run setup 创建的 Google 表格“React SideBar 测试”。 应该会看到一个菜单“我的示例 React 项目”,单击它打开侧边栏并查看按钮。

相关代码

这是前端 SideBar.jsx 代码的样子:

import React, { useState } from 'react';
import { Button } from 'react-bootstrap';
import server from '../../utils/server';

const { serverFunctions } = server;

const SideBar = () => {
    console.log(`serverFunctions: ${JSON.stringify(serverFunctions)}`)
    console.log(`serverFunctions.getActiveRangeA1: ${serverFunctions.getActiveRangeA1}`)

    const [activeRange, setActiveRange] = useState();
    const getActiveRangeA1 = () => {
        serverFunctions
          .getActiveRangeA1()
          .then(setActiveRange)
          .catch(alert);
      };

    return (
    <div>
    <button id="test" onClick={getActiveRangeA1}>Click Me1 </button>
    <button id="test" onClick={()=>getActiveRangeA1()}>Click Me2 </button>
    <Button onClick={getActiveRangeA1}>Click Me 3</Button>
    <Button onClick={() => getActiveRangeA1()}>Click Me 4</Button>
    <p>Current active range is: {activeRange}</p>
  </div>)
}

export default SideBar;

渲染者:

import React from 'react';
import ReactDOM from 'react-dom';
import SideBar from './components/SideBar';

import './styles.css';

ReactDOM.render(<SideBar />, document.getElementById('index'));

../../utils/server 的内容

import Server from 'gas-client';

const { PORT } = process.env;

const server = new Server({
  // this is necessary for local development but will be ignored in production
  allowedDevelopmentDomains: `https://localhost:${PORT}`,
});

export default server;

这是 index.js 的服务器端代码的样子

import * as publicUiFunctions from './ui';
import * as publicSheetFunctions from './sheets';

// Expose public functions by attaching to `global`
global.onOpen = publicUiFunctions.onOpen;
global.openSidebar = publicUiFunctions.openSidebar;
global.getActiveRangeA1 = publicSheetFunctions.getActiveRangeA1;

'./sheets' 引用的服务器端 sheet.js 的代码

export const getActiveRangeA1 = () => {
  return SpreadsheetApp.getActive().getActiveSheet().getActiveRange().getA1Notation();
 }

正如我所说,代码运行良好,但出现错误。

未捕获的类型错误:serverFunctions[functionName] 不是 handleRequest 处的函数

我希望 functionName 有问题,基本上是serverFunctions.getActiveRangeA1 我猜 serverFunctions 不能为空,因为在错误中检测到 serverFunctions。 所以我猜 serverFunctions 中的 functionName 为空或缺失。 但是当我console.log(serverfunctions.getActiveRangeA1)返回一个函数时,应该不会出现错误?

您是否尝试过停止并重新启动“npm run start”?

我在解决另一个问题时遇到了这个问题。 几次尝试后,我注意到每当更改服务器端功能时,我都必须重新启动应用程序“npm run start”才能使其工作。

我认为有必要在 Github README.md 中添加本地开发只适应在 react 端所做的更改,而不是在 google app script 端

我在这里的第一个回复,所以我的不好的是它不是一个明确的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM