現在、Gatsbyで共有ボタンを作成しています。現在のURLに基づいてコンテンツを共有したいのですが、URLは環境や現在のページによって異なります。 GoHugoでは、これは{{ .Permalink }}
で呼び出すことができます。誰もがギャツビーでこれを行う方法を知っていますか?
BlogPostTemplateの子であるShareButtonsコンポーネントがあります。
ギャツビーは、舞台裏で反応ルーターを使用しています。これは、位置情報が小道具で利用できることを意味します。この情報は、条件付きステートメントで使用するか、次のようにstyled-componentsに渡すことができます。
<Component isIndex={this.props.location.pathname === '/'}>
@reach/router
location
コンポーネントからLocation
プロパティを使用して現在のURLを取得できます。
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { Location } from '@reach/router';
class SomeComponent extends Component {
static propTypes = {
location: PropTypes.object.isRequired
}
render() {
const { location } = this.props;
return <div>{JSON.stringify(location)}</div>;
}
}
export default props => (
<Location>
{locationProps => <SomeComponent {...locationProps} {...props} />}
</Location>
);
私のように、「コンポーネントの」URIを取得する方法を知りたいだけでしたが、この単純なニーズと比較したソリューションとドキュメントの一般的な複雑さ、理解を伴わない別の方法のため、この問題全体が混乱しましたリーチルーター(理解するのはいいことですが、ビルド時にURIを取得するだけでは少し重い)は、ページから小道具として場所を渡すことです。 bootstrapメニューのdefaultActiveKeyを設定するなどの目的でURIを使用する場合、これはうまく機能します。メニュー自体がそのページにアクセスする唯一の方法ではないため、「activeClassName」が常に機能するとは限りません。ビルド時にも機能しますが、コンポーネント内のURIにアクセスできます。
これはヘッドレスCMSタイプの実装では機能しないと思いますが、他の方法で対処できます。
以前に小道具をあまり使用したことがない場合、これらはページとコンポーネント(簡略化)を渡すことができるものであり、それらの使用方法を調べることをお勧めします。 Gatsbyのデフォルトでは、ページに場所のパス名プロパティがあるので、コンポーネントを呼び出しページからpropとして渡すことで、その場所をコンポーネントに伝えることができます。英語の場合、これは「このコンポーネントを、ロケーションを自分の "location.pathname"のプロパティ、呼び出しページに設定して使用します」になります。コンポーネントにロケーションが設定されました。
あなたがする必要があるのはそのようなページを作成することです
import React from "react"
import NavComponent from "../../components/navComponent"
const APage = (props) => {
return (
<NavComponent location={props.location.pathname}/>
)
}
export default APage
(私と同じように)考えるのは難しいですが、location = {props.location.pathname}ビットは、コンポーネント内で、小道具に場所の値が設定され、呼び出されたページの場所.pathnameに設定されることを意味しますそれ。したがって、Navコンポーネントでは、uriにアクセスできます。これを取得するには、コンポーネントが小道具を使用する前に、小道具を受け取る必要があることに注意してください。結果はそのようなものです(これを行うことは無意味ですが、それはアイデアを与えます)。
import React from "react"
const NavComponent = (props) => {
return (
<Nav data-uri={props.location}>
</Nav>
)
}
export default NavComponent
APageを使用している場合、data-uriはAPageおよびBPageの場合と同じです。