开发者问题收集

对数组元素做出未定义的反应

2021-11-02
495

访问数组元素时,我得到了未定义的值,但仅使用数组名称时控制台就会显示值。 代码:

const Part = (props) => {
  return <p>{props.name} {props.exercises}</p>
}

const Content = (props) => {

  // when i use console.log(props[0])
  // it shows undefined
  // 
  // but when i use console.log(props)
  // it shows the array information as 
  // {parts: Array(3)}
  // parts: Array(3)
  // 0: {name: 'Fundamentals of React', exercises: 10}
  // 1: {name: 'Using props to pass data', exercises: 7}
  // 2: {name: 'State of a component', exercises: 14}
  // length: 3
  // [[Prototype]]: Array(0)
  // [[Prototype]]: Object

  return (
    <div>
       <Part parts={props[0]} />
    </div>
  )
}

const App = () => {
  const course = 'Half Stack application development'
  const parts = [
    {
    name: 'Fundamentals of React',
    exercises: 10
    },
  
   {
    name: 'Using props to pass data',
    exercises: 7
    },
  
  {
    name: 'State of a component',
    exercises: 14
  }
  ]

  return (
    <div>
      <Content parts={parts} />
    </div>
  )
}

所以我不明白为什么在 Content 中, console.log(props) 返回数组信息,但 console.log(props[0]) 显示未定义,在 App 中没有任何结果。


更新: 感谢大家的回复。现在我知道如果我在 Content 中使用“props.parts”,我会得到正确的结果。然后我又有了一个问题(抱歉,我是 JS 和 React 的新手): 因为“parts”是在 App 中定义的并传递给 Content。在定义 Content 时,我不应该使用或知道“parts”。那么为什么我需要在 Content 中使用“props.parts”?

2个回答
// when i use console.log(props[0])
// it shows undefined

因为数组变量名称是 parts ,正如您在此处提到的那样:

// but when i use console.log(props)
// it shows the array information as 
// {parts: Array(3)}
// parts: Array(3)

因此,请尝试以下操作:

console.log(props.parts)

console.log(props.parts[0])
Mayank Pandeyz
2021-11-02

console.log(props) 不返回数组,它返回对象有 1 个属性名 parts(parts 是数组)

=> 解决方案:

const Content = props => {
      const { parts } = props;
      return (
          <div>
             <Part parts=parts[0] />
          </div>
      )  
}
Henryyy
2021-11-02