【问题标题】:Inserting links from Sheets into Gatsby with gatsby-source-google-spreadsheet使用 gatsby-source-google-spreadsheet 将表格中的链接插入 Gatsby
【发布时间】:2020-03-24 18:40:46
【问题描述】:

我正在使用 Gatsby 中的 gatsby-source-google-spreadsheet 插件来创建页面上的元素列表。该插件是使用我的表格设置的,并且运行良好。当我从工作表中拉入链接时,我正在努力解决如何将链接作为<a href> 插入。

src/pages/index.js:

import React from "react"
import { graphql } from "gatsby"



export default ({ data }) => {
  const sheetData = data.allGoogleSpreadsheetSheetSheet.nodes;
  const rendered = sheetData.map(item =>
    <div className="section">

      <div className="section__when"> {item.day}, {item.date} at {item.time} </div>
      <div className="section__host"> {item.event}, {item.host} </div>
      <div className="section__link"> <a href="{item.link}" target="_blank">Access here. </a></div>
      <div className="section__description"> {item.description} </div>
    </div>);

  return rendered;
};


export const query = graphql`
  query {
    allGoogleSpreadsheetSheetSheet {
      nodes {
        event
        host
        link
        day
        time
        date
        description
      }
    }
  }
`;

这给了我一个合适的列表,但是当我点击链接时,它试图带我去:http://localhost:8000/%7Bitem.link%7D,这显然是错误的。现在,我的表格只有每个条目的链接https://www.google.com。如何更改链接 div 的结构方式以将我带到外部链接?

【问题讨论】:

    标签: javascript reactjs graphql gatsby


    【解决方案1】:

    如果您检查您的链接,您会发现%7Bitem.link%7D 中的变量名的字面意思是{item.link},因此您的代码无法识别该变量并且它作为字符串{item.link} 插入。

    假设您正在检索并正确接收变量数据,如您所说。

    试试这个:

    import React from "react"
    import { graphql } from "gatsby"
    
    
    
    export default ({ data }) => {
      const sheetData = data.allGoogleSpreadsheetSheetSheet.nodes;
      const rendered = sheetData.map(item =>
        <div className="section">
    
          <div className="section__when"> {item.day}, {item.date} at {item.time} </div>
          <div className="section__host"> {item.event}, {item.host} </div>
          <div className="section__link"> <a href=`${item.link}` target="_blank">Access here. </a></div>
          <div className="section__description"> {item.description} </div>
        </div>);
    
      return rendered;
    };
    
    
    export const query = graphql`
      query {
        allGoogleSpreadsheetSheetSheet {
          nodes {
            event
            host
            link
            day
            time
            date
            description
          }
        }
      }
    `;
    

    找出你的锚标记的不同之处:&lt;a href=`${item.link}` target="_blank"&gt;

    基本上你使用的是 ES6 中的template literals。它们是允许嵌入表达式的字符串文字,并由反引号 (`)(重音符号)字符而不是双引号或单引号括起来。

    【讨论】:

    • 啊,这非常接近!这最终对我有用:''。谢谢!
    • 不用担心@impostorsyndrome,我很乐意提供帮助。如果您的问题已解决,请投票、接受并验证我的回答以结束问题。
    猜你喜欢
    • 2021-12-20
    • 2019-12-10
    • 2020-06-27
    • 2021-01-10
    • 1970-01-01
    • 2020-08-11
    • 2020-05-01
    • 2021-05-08
    • 2020-03-20
    相关资源
    最近更新 更多