React,Redux:无法读取未定义的属性(正在读取...)

React, Redux: Cannot read properties of undefined (reading ...)

我正在将数据(对象)提取到 redux 状态并将该对象放入反应道具中。

如果通过单击按钮检索数据,代码工作正常。但是我想在渲染组件时检索数据,但这是行不通的。相反,我收到错误 Cannot read properties of undefined (reading 'id')

这段代码确实有效,我可以在 redux-state 中看到检索到的对象(在 Chrome redux-devtool 中):

export class Main extends Component {

 componentDidMount(){
    this.props.getQuery();
 }

 onClick = () => {
    console.log(this.props.query.query.id)
 } 

 render() {
    return (
        <div>
            <Button onClick={this.onClick}>Print id</Button>
        </div>
    )
 }
}

const mapStateToProps = state => ({
 query: state.query.query
});

export default connect(mapStateToProps, { getQuery })(Main)

但是这段代码不起作用:

export class Main extends Component {

 componentDidMount(){
    this.props.getQuery();
    console.log(this.props.query.query.id) //This line throws an error
 }

 onClick = () => {
    console.log(this.props.query.query.id)
 } 

 render() {
    return (
        <div>
            <Button onClick={this.onClick}>Print id</Button>
            <p>this.props.query.query.id</p> //This line throws an error
        </div>
    )
 }
}

const mapStateToProps = state => ({
 query: state.query.query
});

export default connect(mapStateToProps, { getQuery })(Main)

我是 React 和 redux 的新手,非常感谢任何帮助。 谢谢!

当您访问查询时添加 optional chaining operator,如下所示:this.props.query?.idmapStateToProps 中,你将 state.query.query 放在 JSX 中,你可以直接访问 idthis.props.query?.id 否则它会像你提到的那样抛出错误。

当你需要在 JSX 中使用任何变量时,你应该将它放在花括号中,例如: <li>{this.props.query?.id}</li>

你可以像这样使用链接运算符

<p>this.props.query?.query?.id</p> //This line throws an error

或先验证再打印

{ this.props.query && this.props.query.query &&
<p>this.props.query.query.id</p> 
}