简体   繁体   English

无法从 Next.js 中的 getStaticProps 传递数组

[英]Cannot pass array from getStaticProps in Next.js

When I pass a JSON array from getStaticProps in Next.js, I get the following error on accessing it.当我从 Next.js 中的 getStaticProps 传递 JSON 数组时,访问它时出现以下错误。

TypeError: Cannot read property 'contentBody' of undefined
module.exports../pages/[author]/[article].js.__webpack_exports__.default
./pages/[author]/[article].js:17
 14 |     <img/>
 15 | </Center>
 16 | <Center className={Style.contentContainer}>question
> 17 |     <Content>
    | ^  18 |         {
 19 |             `${props.posts.contentBody}`
 20 |         }

The code: pages/[author]/[article].js代码: pages/[author]/[article].js

import Center from "../../components/Center/Center";
import Style from "../../modules/article.module.css"
import React from "react"
import CommonContainer from "../../components/CommonContainer/CommonContainer";
import Content from "../../components/Content/Content";
//static content
import fs from 'fs'
import path from 'path'

export default (props) => {
    return (
        <CommonContainer>
            <Center className={Style.mainImg}>
                <img/>
            </Center>
            <Center className={Style.contentContainer}>
                <Content>
                    {
                        `${props.posts.contentBody}`
                    }
                </Content>
            </Center>
        </CommonContainer>
    )
}

export async function getStaticProps({params}) {
    const articlePath = path.join(process.cwd(), `SampleArticles/${params.author}/${params.article}.json`);
    let posts = JSON.parse(fs.readFileSync(articlePath).toString());
    return {
        props: {
            posts,
        },
    }

}

export async function getStaticPaths() {
    return {
        paths: [],
        fallback: true
    };
}

JSON FILE JSON 文件

{
  "title": "rust",
  "author": "AniketFuryRocks",
  "image": {
    "src": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Norco_Range.jpg/2560px-Norco_Range.jpg"
  },
  "contentBody": [
    "as","asd"
  ]
}

Because your posts object is an array, I would recommend trying to use an index value to access the first value in your posts object.因为您的posts object 是一个数组,所以我建议您尝试使用索引值来访问您的posts object 中的第一个值。

Something like this:像这样的东西:

`${props.posts[0].contentBody}`

you have to add curly brackets {} to wrap props (ln. 1 below), it should be:您必须添加花括号{}来包装props (下面的 ln.1),它应该是:

export default ({ props }) => {
    return (
        <CommonContainer>
            <Center className={Style.mainImg}>
                <img/>
            </Center>
            <Center className={Style.contentContainer}>
                <Content>
                    {
                        `${props.posts.contentBody}`
                    }
                </Content>
            </Center>
        </CommonContainer>
    )
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM