web-dev-qa-db-ja.com

Gatsbygraphqlクエリで正規表現に変数を渡す

変数$tagを受け取っている次のクエリがあります。現在、frontmatter.keywordsの値に基づいて結果をフィルタリングしています。 keywordsはカンマ区切りの文字列であるため、正規表現を使用して$tagが含まれているかどうかを確認する必要がありますが、変数を正規表現に渡す方法がわかりません。値を正規表現にハードコーディングすると(以下のコードのように/example/をハードコーディングすると、フィルタリングが機能します。example$tagに置き換えると、エラーが発生します。

GraphQLError:変数「$ tag」が操作「TagQuery」で使用されることはありません。

export const pageQuery = graphql`
  query TagQuery($tag: String) {
    allMarkdownRemark(
      limit: 100
      sort: { fields: [frontmatter___date], order: DESC }
      filter: { frontmatter: { keywords: { regex: "/example/" } } }
    ) {
      totalCount
      edges {
        node {
          fields {
            slug
          }
          excerpt
          frontmatter {
            title
            keywords
            date
          }
        }
      }
    }
  }
`;

正規表現内で$tagをどのように使用する必要がありますか?

実際には別のアプローチを取り、タグをgatsby-node.jsの配列として追加したいのですが、配列の値に基づいてフィルタリングする方法はないようです。

12
Undistraction

最終的にタグを配列に分割し、次に以下を使用してフィルタリングしました。

filter: { fields: { tags: { in: [$tag] } } }
4
Undistraction

$ tagを渡す場合は、次のように変換するだけです。

const $tag = "\/".concat(tag).concat("\/")

ただし、エラーは、クエリが変数をまったく使用していないという事実を具体的に示しています。だからあなたもする必要があります

filter: { frontmatter: { keywords: { regex: $tag } } }
0
obh