javascript - 如何在 next.js getInitialProps 中调用 Prismic API?

标签 javascript reactjs next.js prismic.io

如何调用 Prismic (CMS) API,来自 next.js application ?在我之前的 next.js 中:

import React from 'react'
import Link from 'next/link'
import 'isomorphic-fetch'

export default class Index extends React.Component {
  static async getInitialProps () {
    const res = await fetch('https://myAPI_URL')
    const json = await res.json()
    return { cars: json.results }
  }

  render () {
    return (
      <div>
        <p>I can see the data {this.props.cars} </p>
      </div>
    )
  }
}

但我想使用 Prismic 开发工具包作为依赖项,如所述in their documentation.

npm install prismic-javascript prismic-dom --save

以及调用 Prismic 的代码:

const Prismic = require('prismic-javascript');

const apiEndpoint = "https://your-repository-name.prismic.io/api/v2";
const apiToken = "this_is_a_fake_token_M1NrQUFDWUE0RYvQnvv70";

Prismic.getApi(apiEndpoint, {accessToken: apiToken}).then(function(api) {
  return api.query(""); // An empty query will return all the documents
}).then(function(response) {
  console.log("Documents: ", response.results);
}, function(err) {
  console.log("Something went wrong: ", err);
});

但是如何在 getInitialProps 中使 Prismic API 调用与 next.js 一起工作?例如:

import React from 'react'
import Link from 'next/link'
import 'isomorphic-fetch'

export default class Index extends React.Component {
  static async getInitialProps () {
    // fetch Prismic API and return the results
  }

  render () {
    return (
      <div>
        <p>Showing data fetched from API here</p>
      </div>
    )
  }
}

最佳答案

您已经准备好所有组件。等待 Prismic 请求,而不是 fetch。然后返回结果。

import React from 'react';
import Prismic from 'prismic-javascript';

const apiEndpoint = 'https://project.prismic.io/api/v2';
const apiToken = 'TOKEN';

export default class Index extends React.Component {
  static async getInitialProps({ req, query }) {
    const data = await Prismic.getApi(apiEndpoint, { accessToken: apiToken })
      .then(api => {
        return api.query(''); // An empty query will return all the documents
      })
      .catch(err => console.log(err));

    return { cars: data.results };
  }

  render() {
    return <div>Example car id: {this.props.cars[0].id}</div>;
  }
}

关于javascript - 如何在 next.js getInitialProps 中调用 Prismic API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46383897/

相关文章:

javascript - 如何使用 javascript/jQuery 替换 onclick 操作(使用正则表达式)?

javascript - 在 JavaScript 中预加载多个图像的最佳方式是什么?

javascript - 无法获取/使用 React Router

reactjs - React 应用程序部署在 cPanel 上后,Web 目录可见

django - React 和 Django REST 的文件夹结构

node.js - 无法使用自定义 Express 服务器解析 nextjs 中的 'fs'

javascript - Nextjs 自定义 404 页面在访问 netlify 中的无效 URL 时不显示

typescript - 使用 Typescript 的 GetStaticProps 仅用作箭头函数,而不用作函数声明

javascript - 为什么angular js没有使用上次赋值?

reactjs - 如何使用 React 函数组件获取组件的位置