开发者问题收集

无法读取 React 中未定义错误的属性“name”

2018-10-18
243

我正在创建一个简单的联系人 React 应用程序,并且我已经为名称创建了一个链接,该链接将转到 Show 组件。

但是,当我点击链接时,它会显示 {contactId: "undefined">{contact: undefined>

下面是我的联系人组件代码。

import React from 'react';

import { Link } from 'react-router';

const Contact = props =>
<div className= 'pure-u-1-3'>
    <h1>
        <Link to={`/contacts/${props.id}`}>
        {props.name}
        </Link>
    </h1>
    <h2>{props.email}</h2>

 </div>;

 export default Contact;

不确定错误是出在此组件中还是出在收集所有联系人的集合组件中?

这是保存数据的数据组件。

const data = [
{ id: 1, name: 'brian patterson', email: '[email protected]',},
{ id: 2, name: 'katy patterson', email: '[email protected]',},
{ id: 3, name: 'petra verkaik', email: '[email protected]',}
];

export default data;

集合组件会呈现所有数据,因此我不确定错误是否出在此部分代码中。

import React from 'react';
import Contact from './Contact';
import data from './data';
import './Collection.css';




 class Layout extends React.Component {
 componentWillMount() {
    this.setState({
        contacts: data,
    });
}

addContact = (e) => {
    e.preventDefault();
    const contacts = this.state.contacts;
    const newId = contacts[contacts.length - 1].id + 1
    this.setState({
        contacts: contacts.concat({ id: newId, name: this.refs.name.value, email: this.refs.email.value }),
    });
    console.log('clicked!!');
    this.refs.name.value = null;
    this.refs.email.value = null;
}
newContact = () =>
<div className= 'pure-g'>
<div className='pure-u-12-24'> 
  <form className='pure-form' onSubmit={this.addContact}>
      <fieldset>

          <legend>New Contact</legend>

          <input ref='email' type="email" placeholder='[email protected]' />
          <input ref='name' type="text" placeholder='Name' />
          <button type="submit" class="pure-button pure-button-   primary">Add</button>
      </fieldset>
  </form>
  </div>
 </div>;
   render() {
    return (
    <div id='Collection'>
     {this.newContact()}
        <div className='pure-g'>
          {this.state.contacts.map(info =>
            <Contact key={info.id} name={info.name} email={info.email} />
            )}
        </div>
    </div>
    );
  }
}

export default Layout;

单击链接后,它会转到显示组件,这是 Show.js 组件中的代码。

import React from 'react';


import data from './data';

 class Show extends React.Component {
  componentWillMount() {
    console.log(this.props.params);
    this.setState({
     contact: data.filter(c => c.id === parseInt(this.props.params.contactId,    10))[0],
    });
   }
   render() {
    console.log(this.state)
    return (
    <div id='Show'>
      <h1>{this.state.contact.name}</h1>
    </div>

    );
   }
  }

export default Show;
1个回答

看起来您没有将 id 传递给 Contact 组件。它应该是这样的:

<Contact key={info.id} id={info.id} name={info.name} email={info.email} /> 然后您可以在组件中使用 props.id

此外, contactId 在哪里定义或使用?

dondragon2
2018-10-18