変数$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
の配列として追加したいのですが、配列の値に基づいてフィルタリングする方法はないようです。
最終的にタグを配列に分割し、次に以下を使用してフィルタリングしました。
filter: { fields: { tags: { in: [$tag] } } }
$ tagを渡す場合は、次のように変換するだけです。
const $tag = "\/".concat(tag).concat("\/")
ただし、エラーは、クエリが変数をまったく使用していないという事実を具体的に示しています。だからあなたもする必要があります
filter: { frontmatter: { keywords: { regex: $tag } } }