当前位置: 首页 > 知识库问答 >
问题:

无法循环传递给组件的数组

薛华容
2023-03-14

你好,亲爱的堆栈溢出,我刚刚启动了一个盖茨比网站,但我有通过传递给组件的数组循环的问题。

我有一个叫博客的盖茨比网页。js,在这个页面中,我展示了通过GraphQL检索到的博客标题。直接在博客中使用循环。我可以看到所有的标题。

我的blog.js圈是这样的

      <div> 
            <h1>Blogg data</h1>
            {data.posts.edges.map (({ node }) => (
                <p>{node.title}</p>
            ))}
        </div>  

它从以下GraphQL查询中检索数据

export const query = graphql`
  query BlogPageQuery {
    posts: allSanityPost(
      limit: 12
      sort: { fields: [publishedAt], order: DESC }
    ) {
      edges {
        node {
          id
          publishedAt
          mainImage {
            asset {
              _id
            }
            alt
          }
          title
          _rawExcerpt
          slug {
            current
          }
        }
      }
    }
  }
`

而不是在博客中创建博客帖子预览。相反,我想使用一个组件来实现这一点。我创建了一个名为BlogPostReviewGrid的组件,并从blog中这样调用它。js

<BlogPostPreviewGrid blogPosts={data}/>

我的BlogPostReviewGrid组件当前看起来像这样

const BlogPostPreviewGrid = blogPosts => {
    return (
    <div>   
     <p>Here be component data</p>

  {console.log(blogPosts)}
     {blogPosts.posts.edges.map (({ node }) => (
                <p>{node.title}</p>
            ))}
    </div>
    )

}
export default BlogPostPreviewGrid

我不能循环通过组件检索的数据,当运行循环时,我得到一个控制台错误按摩,声明blogPostPreviewGrid.js:13未捕获的类型错误:无法读取未定义的属性'边缘'

我的第一反应是安慰。日志日志、博客帖子、控制台。日志显示了数组对象,我从Chromes控制台日志中附加了一个数组

blogPostPreviewGrid.js:13 {blogPosts: {…}}blogPosts: posts: edges: Array(2)0: node: {id: "54fe241a-c7d4-50d2-be51-4403304ddc86", publishedAt: "2020-01-05T23:00:00.000Z", mainImage: {…}, title: "Testpost2", _rawExcerpt: Array(1), …}__proto__: Object1: {node: {…}}length: 

我还编写了一个条件语句,以便组件仅在blogpost中存在某些内容时尝试呈现数据,并尝试调整循环。我最后做了一个git重置——很难,所以条件渲染现在不存在。

谢谢大家的回复!

共有2个答案

濮阳品
2023-03-14

这应该行得通:

BlogPostReviewGrid。jsx

const BlogPostPreviewGrid = ({blogPosts}) => {
    return (
      <div>
         {blogPosts.posts.edges.map (({ node }) => (
            <p>{node.title}</p>
         ))}
      </div>
    )

}
export default BlogPostPreviewGrid
巫马松
2023-03-14

react中传递给子组件的值在一个称为props的大对象中传递:https://reactjs.org/docs/components-and-props.html.

因此,您需要在函数调用中分解道具:

const BlogPostPreviewGrid = ({blogPosts}) => {
    // do stuff
    console.log(blogPosts)
}

或者使用道具对象

const BlogPostPreviewGrid = props => {
    // do stuff using blogPosts 
    console.log(props.blogPosts);
}

如果您的组件看起来像这样

const Foo = props => {
    console.log(props.prop1);
    console.log(props.prop2);
}

或者像这样:

const Foo = ({ prop1, prop2 }) => {
    console.log(prop1);
    console.log(prop2);
}

 类似资料:
  • [编辑] 问题不在于isAuth属性,而在于ProtectedRoad中重定向组件中的props.location!尽管如此,如果你有一个问题来理解use Selector或mapStateToProps,去@Versifici的答案! [结束编辑] 我有一个React/Redux应用程序,在authReducer中具有isAuth属性。我想将其传递给我的ProtectedRoute组件以检查行为

  • 问题内容: 如何将整个数组传递给方法? 如何正确执行此操作? 问题答案: 你做这个: 只需将其作为其他任何变量传递即可。 在Java中,数组是通过引用传递的。

  • 问题内容: 我正在尝试访问DetailsPage组件中的 ID ,但无法访问它。我试过了 将参数传递给DetailsPage,但徒劳。 所以有什么想法如何将ID传递给DetailsPage吗? 问题答案: 如果要将props传递到路线内的组件,最简单的方法是利用,如下所示: 您可以使用以下内容访问道具: 将需要通过原路线的道具,否则你将只能得到内。

  • 问题内容: 我想将功能传递给子组件,但出现此错误。 基本上是我想做的。 var ReactGridLayout = require(’react-grid-layout’); 似乎它是在React v16中引入的。因此,将函数从父代传递给子代的正确方法是什么? 问题答案: 我发现出了什么问题。这是因为react-grid-layout。我必须将其余的属性传递给孩子。

  • C++ 数组 C++ 中您可以通过指定不带索引的数组名来传递一个指向数组的指针。 C++ 传数组给一个函数,数组类型自动转换为指针类型,因而传的实际是地址。 如果您想要在函数中传递一个一维数组作为参数,您必须以下面三种方式来声明函数形式参数,这三种声明方式的结果是一样的,因为每种方式都会告诉编译器将要接收一个整型指针。同样地,您也可以传递一个多维数组作为形式参数。 方式 1 形式参数是一个指针:

  • App/Http/Livewire UserController-Livewire/UserManagement/UserController 数据表/特征/数据表 资源/视图/livewire 用户控制器刀片-livewire/用户管理/用户控制器 我正在创建一个CRUD系统,使用批量操作删除所选数据。我已经提取了负责选择多个项目或选择当前数据表中的所有项目的逻辑,即用户控制器,所以我可以使用它