Попытка сделать выборку API с использованием идентификатора из предыдущей выборки API - PullRequest
0 голосов
/ 14 ноября 2018

Итак, я попытался найти информацию об этом, и я чувствую себя довольно застрявшим. У меня безголовый WordPress, использующий реагирование, и у меня есть страница, которая получает мой единственный пост и возвращает его.

Каждый пост (пользовательский тип поста, называемый Tjanster) имеет поле acf со ссылкой на другой пользовательский тип поста, который является лицом, связанным с постом.

Сейчас все работает с получением содержимого публикации, а также объекта person с идентификатором, слагом и т. Д. Но мне нужен контент ACF для этого типа сообщения "person".

Моя идея сейчас заключается в том, что я получаю идентификатор от объекта person в посте, а затем делаю другую api-выборку для этого идентификатора непосредственно к конечной точке человека, это правильное мышление?

Это мой пост, который я получаю с acf.person [0] .id от (http://localhost:8080/wp-json/wp/v2/tjanster)

).

enter image description here

Здесь я получаю идентификатор человека, который равен 68, а затем я могу сделать запрос к http://localhost:8080/wp-json/wp/v2/person/68, который возвращает объект с правильной информацией acf:

enter image description here

И вот как сейчас выглядит мой tjanster.js (пост-страница):

import Layout from "../components/Layout.js";
import React, { Component } from "react";
import fetch from "isomorphic-unfetch";
import Error from "next/error";
import PageWrapper from "../components/PageWrapper.js";
import Menu from "../components/Menu.js";
import { Config } from "../config.js";

class Tjanster extends Component {
    static async getInitialProps(context) {
        const { slug, apiRoute } = context.query;

        const res = await fetch(
            `${Config.apiUrl}/wp-json/postlight/v1/${apiRoute}?slug=${slug}`
        );
        const tjanster = await res.json();

        return { tjanster };
    }


    render() {
        if (!this.props.tjanster.title) return <Error statusCode={404} />;

        let personId = this.props.tjanster.acf.person[0].ID;
        console.log(personId);

        return (
            <Layout>

                {this.props.tjanster.title.rendered}

            </Layout>
        );
    }
}

export default PageWrapper(Tjanster);

Как вы можете видеть, у меня есть идентификатор объекта person, сохраненный под render как personId, но я не совсем уверен, что делать дальше? Я подумал, что мог бы сделать еще одну выборку сверху, используя ${Config.apiUrl}/wp-json/wp/v2/person/${personId}, но я не получу, чтобы это работало, так как у меня пока нет доступа к идентификатору.

Любые идеи будут с благодарностью!

1 Ответ

0 голосов
/ 14 ноября 2018

Вам нужно использовать JavaScript Promise для обработки нескольких асинхронных вызовов.Просто сделайте цепочку a, после первого извлечения вы сможете получить доступ к Id, когда он будет доступен.

...