在 Header 组件 Next.js React 中渲染道具

Render Props inside of Header Component Next.js React

我的 React.js 应用程序中有一个组件,使用 Next.js - 这个组件是 Header 我正在使用这个在我的布局中获取每个 header 元素。

我想要做的是在其中获取一个 API 请求,这样我就可以在 header 中呈现菜单项。API 是 return进入菜单object。

这是我的代码。

import fetch from 'isomorphic-unfetch'
import React, { Component } from "react";
import Link from 'next/link';
import { Config } from "../config.js";

class Header extends Component {

    static async getInitialProps() {
        const menuRes = await fetch(
            `${Config.apiUrl}/wp-json/menus/v1/menus/header-menu`   
        );
        const menu = await postsRes.json();
        return {menu}
    }

    render() {
        console.log(this.props);
        return (
            <div>
                213
            </div>
        );
    }
}

export default Header

我还在学习 React,所以如果我 100% 错了,请原谅。只是道具没有 return 任何东西:

this.props

我没能在网上找到任何人谈论这个,否则我很乐意阅读它。显然这适用于 page.js 和 return 我的所有项目。

static async getInitialProps(context) {
        const { id } = context.query
        const postsRes = await fetch(
            `${Config.apiUrl}/wp-json/wp/v2/pages?slug=sample-page`   
        );
        const posts = await postsRes.json();
        return {posts}
    }

但我不知道为什么它不能在组件内部工作:(

我建议您只需在组件的常规生命周期中获取 componentDidMount 中的数据即可。在这里您可以找到 great diagram 解释 React 生命周期

我建议在 componentWillMount 中获取您的数据,然后使用您的组件状态来管理它。

在组件顶部创建一个构造函数,设置默认值,然后在检索数据时设置状态并呈现它。

道具是您发送给组件的东西,状态是您用来管理组件内数据的东西。

上面的两个答案都很棒!!真的很有帮助。这是我使用的代码:

constructor() {
        super();
        this.state = { data: [] };
    }

    componentDidMount() {
        fetch(`${Config.apiUrl}/wp-json/menus/v1/menus/header-menu`)
          .then(res => res.json())
          .then(json => this.setState({ data: json }));
    }

以防万一以后有人遇到这个:)