【问题标题】:Mapping a react component doesn't return to the parent component映射一个反应组件不会返回到父组件
【发布时间】:2021-04-21 04:19:14
【问题描述】:

我有两个组件。一个组件 ProfileviewlistProfileview 的子组件,在 Profileviewlist 内映射组件返回 Profileview 外的子组件。我一直在这个网站上寻找这个问题。我正在寻找一种方法来让Profileviewlist 的组件在Profileview 内部呈现。任何见解都会有所帮助。

注意:组件渲染,只是不在父级(profileview)中。

个人资料视图:

import React from 'react'
import Profileviewheader from './profileviewheader'
import Profileviewlist from './Profileviewlist'

export default function Profileview({ persons, display_selector }) {
  if (persons == null || persons.status == "error") {
    return (
      <Profileviewheader />
    )
  }
  else {
    console.log("rendering list")
    console.log()
    return (
      <>
        <Profileviewheader />
        <Profileviewlist persons={persons} display_selector={display_selector} />
      </>
    )
  }
}

** 个人资料视图列表:**

import React from 'react'
import Profileviewchild from './profileviewchild';

export default function Profileviewlist({ persons, display_selector }) {
  return (
    persons.map(person => {
      return <Profileviewchild person={person} change_selected={display_selector} />
    })
  )
}

Parental Hierarchy(我希望组件以 div 的形式组织的方式)每个组件都指向它的子组件:

个人资料视图:-> Profileviewlist:-> Profileviewchild:

【问题讨论】:

  • 这么多Profileview,你能用childrenparent的话更好地解释一下吗?
  • profileview 是整体父级。纵断面图列表是纵断面图的子级。 profileview 孩子是 profileviewlist 的孩子。像这样:{Profileview:{Profileviewlist:{Profileviewchild}}}
  • 你的ProfileViewList 渲染了吗?你在console 中得到console.log("rendering list") 吗?
  • @TaghiKhavari 是的,一切都在渲染。唯一的问题是渲染的元素不在 profileview 内。 imgur.com/a/T45kkG2

标签: reactjs


【解决方案1】:

据我了解,您有一个个人资料列表,您应该创建一个三元运算符来检查 persons 是否不为空并且有一个长度然后映射到它们,否则会显示错误。

这样的事情应该可以工作:

export default function Profileview({ persons, display_selector }) {
  return (
    <div id="profileview">
      <Profileviewheader />
      {persons.length ? persons.map(person => (
        <Profileviewchild person={person} change_selected={display_selector} />
      )) :
        <p>{persons.status}</p>}
    </div>
  )
}

编辑: 检查共享图片后,问题是您在Profileviewheader 上分配了id="profileview"。你应该分配这个组件。

【讨论】:

  • Profileviewchild 仍然出现在配置文件视图之外。在查看 dom 时。除此之外,这是切断中间人的好方法,即 profileviewlist。
  • 是的,这只是不必要的。你能分享一下你的意思吗?
  • 你能分享Profileviewheader吗?我想你在Profileviewheader上命名id="profileview"?再次尝试回答显示结果。
【解决方案2】:

问题是由personsProfileviewProfileviewlist 中发生的

这里persons 的类型似乎是Object

所以persons.map() 永远不会工作,因为mapArray 而不是Object 的方法。理想的方式是personslist 键域。

{
   status: 'success',
   list: [...] // persons list
}
   ...
   <Profileviewlist persons={persons.list} display_selector={display_selector} />
   ...

【讨论】:

  • Persons 是一个对象数组,但它也可能只是一个对象。这就是为什么我检查它是否有 .status 字段。人员可以是 {user:{moredata:"123"}} 或 {status:"error"}
  • persons 可以同时是array 和object 出错时可以传person.status = "error"
猜你喜欢
  • 2022-06-20
  • 1970-01-01
  • 2018-09-04
  • 2021-05-10
  • 2022-01-23
  • 2012-05-17
  • 2020-11-21
  • 2020-08-06
  • 1970-01-01
相关资源
最近更新 更多