开发者问题收集

TypeError:无法读取未定义的属性“props”——即使我将一些数据通过 props 传递给该组件

2020-05-06
73

有一件事我不明白,为什么会给我一个错误“TypeError:无法读取未定义的属性‘props’”?

import React from 'react';
import { withRouter } from 'react-router-dom';
import * as ROUTES from '../../../constants/routes';

function Summary({ reservationData }) {
    if (reservationData.participants !== "" && reservationData.city !== "" && reservationData.day !== "" && reservationData.hour !== "") {
        return (
            <div>Summary<br />
                Participants: {reservationData.participants} <br />
                City: {reservationData.city} <br />
                Day: {reservationData.day} <br />
                Hour: {reservationData.hour} <br />
                {console.log(reservationData)}
            </div>

        );
    } else {
        { this.props.history.push(ROUTES.RESERVATION) }
    }
}

它在 else 语句的最后一行给了我一个错误

} else {
    { this.props.history.push(ROUTES.RESERVATION) }
}
3个回答

Summary 是一个函数组件,无法访问 this 。为了在函数组件中使用 props.history ,您可以像下面这样解构参数。

function Summary({ reservationData, history }) {
    if (reservationData.participants !== "" && reservationData.city !== "" && reservationData.day !== "" && reservationData.hour !== "") {
        return (
            <div>Summary<br />
                Participants: {reservationData.participants} <br />
                City: {reservationData.city} <br />
                Day: {reservationData.day} <br />
                Hour: {reservationData.hour} <br />
                {console.log(reservationData)}
            </div>

        );
    } else {
        history.push(ROUTES.RESERVATION;
    }
}
Shubham Khatri
2020-05-06

可以看到您正在以类组件的方式执行操作。

如果您以前在组件中使用 props,您可以这样做

function Summary(props) {
    // Then access the history and reservationData in this way
    const { reservationData, history } = props

    history.push(ROUTES.RESERVATION);

    // Or
    props.history.push(ROUTES.RESERVATION)

}

如果您认为代码有点麻烦,可以按照 Shubham Khatri 所做的操作进行操作

function Summary({ reservationData, history}) {
    history.push(ROUTES.RESERVATION)
}

this.props 只能在类组件中使用。

所有这些都是有效的,写作风格取决于您,请随意尝试不同的方法,快乐学习。

Wesley Loh
2020-05-06

如果您想使用 this ,您必须以类反应样式创建组件。

class Summary extends React.Component {
  render() {
    //...
    this.props.history.push(ROUTES.RESERVATION)
  }
}

export default withRouter(Summary)
Kresna Hendri
2020-05-06