ReactJS路线组件/渲染

时间:2019-11-28 09:36:52

标签: javascript reactjs react-router react-router-dom react-router-component

我创建了一个简单的预订应用,其中包含3个文件,App.jsBooked.js(第一个孩子)和Details.js(第二个孩子)
我正在尝试访问App.js以使用第二个子项(Detail.js)删除数据,但无法继续,因为它引发了

错误
  

“ TypeError:无法读取未定义的属性'状态'”

每当我尝试向路由组件添加功能以访问App.js

这是主页 https://i.stack.imgur.com/4PrM8.png
当我单击Booked.js中的数据时,我将重定向到Details.js以查看特定数据https://i.stack.imgur.com/H2EnL.png

使用此代码,带有组件的路由有效

<Route path="/details" component={Details} /> 

但是在添加函数后却给我一个错误

<Route path="/details" component={ () => <Details delBook={this.delBook} /> } />

<Route path="/details" render={()=><Details delBook={this.delBook}/>}/> 

Booking.js中的链接

 <Link
  to={{
  pathname: "/details",
  state: {
  id: booking.id,
  fname: booking.fname,
  lname: booking.lname,
  email: booking.email,
  ddate: booking.ddate,
  ttime: booking.ttime
  }
  }}
  key={booking.id} 
  style={linkStyle}>

在Details.js中引发错误的地方。

 state = {
    id: this.props.location.state.id,
    fname:  this.props.location.state.fname,
    lname:  this.props.location.state.lname,
    email: this.props.location.state.email,
    ddate: this.props.location.state.ddate,
    ttime: this.props.location.state.ttime,
}

有人可以帮忙解释一下为什么会这样吗? 任何解决方案或替代方案? TIA!

1 个答案:

答案 0 :(得分:2)

在将this作为道具传递时,需要将其绑定。同样,最好也传递路由器的道具:

<Route path="/details" component={ (routerProps) => <Details delBook={this.delBook.bind(this)} {...routerProps} />  } />

此外,在Details.js中,您应直接使用props,而不是this

class Details extends React.Component {
  constructor(props) {  // Use constructor to initialise `this` properly
    super(props);

    this.state = {
      id: props.location.state.id,
      fname: props.location.state.fname,
      lname: props.location.state.lname,
      email: props.location.state.email,
      ddate: props.location.state.ddate,
      ttime: props.location.state.ttime
    };
  }
}