React Component返回“TypeError:undefined没有属性”

时间:2017-04-18 20:28:03

标签: javascript reactjs

我在下面有一个组件,稍后会在另一个组件中使用。

以下是代码:

import React, { PropTypes } from 'react';

const MyComponent = () => (
  <div>
    <div className="row">
      <div className="col-md-12">
        <div className="media">
          <div className="media-left media-middle">
            <a href="#no"><img className="media-object" src={this.props.image} alt="" /></a>
          </div>
          <div className="media-body"><span className="pull-right">{this.props.name}</span>
            <h4 className="media-heading">{this.props.title}</h4>
            {this.props.desc}
          </div>
        </div>
      </div>
    </div>
  </div>
);

MyComponent.propTypes = {
  image: PropTypes.string,
  name: PropTypes.string,
  title: PropTypes.string,
  desc: PropTypes.string,
};

export default MyComponent;

//Then on other component

import React from 'react';
import MyComponent from './mycomponent.component';

<MyComponent
  title="Title Here"
  name="Some Name"
  desc="Description here"
  image="http://placehold.it/100x100"
/>

问题是它没有渲染,开发人员控制台又返回以下错误:

“TypeError:undefined没有属性”

这里有什么问题,我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

您必须将道具传递给MyComponent,如此:

const MyComponent = (props) => (
     console.log("example prop is", props.image);
);

答案 1 :(得分:0)

我遇到了类似的问题。这是因为初始数组被定义为空数组[]。这将引起反应,将其定义为undefined会导致问题。相反,您可以使用随机元素初始化数组,然后在设置状态时将其替换。

我使用的是-

class App extends React.Component {
  state = {
    userdata:[], /* Notice that the array is empty*/
   };


  responseGoogle = (response) => {
  console.log(response);
  this.setState({userdata: response});
  }

我将其更改为

class App extends React.Component {
  state = {
    userdata:['Hello'], /* Notice that the array has an initial element*/
   };


  responseGoogle = (response) => {
  console.log(response);
  this.setState({userdata: response});
  }

我不确定是什么问题,但是使用初始元素可以解决问题