代码之家  ›  专栏  ›  技术社区  ›  bigmugcup

react props:无法访问数组中同时通过props传递索引的对象中的键

  •  2
  • bigmugcup  · 技术社区  · 7 年前

    我正在处理一个react项目,在这个项目中,我试图访问对象中的一个键,这个对象是使用索引的数组中的一个元素,但却未定义。

    问题似乎是我得到了一个对象数组作为道具,索引也作为道具。当我尝试使用props中的索引访问数组中对象的ID或publicID时,我得到了错误。下面是我得到的简化版本。

    为什么会发生这种情况?我如何解决?

    console.log(this.props.images);
    // [{id: 1, publicid: "1234" }, {id: 2, publicid: "5678"}]
    
    console.log(this.props.imageIndex)
    // 0
    
    console.log(this.props.images[0].publicid)
    // 1234
    
    console.log(this.props.images[this.props.imageIndex])
    // {id: 1, publicid: "1234" }
    
    console.log(this.props.images[this.props.imageIndex].publicid)
    // Cannot read property 'publicid' of undefined
    

    **更新更多代码**

    import React, { Component } from 'react';
    import { connect } from 'react-redux';
    import _ from 'lodash';
    
    import * as actions from '../../actions';
    
    class ImageBox extends Component {
    
      handleClick() {
        console.log('handleClose:');
      }
    
      renderImages() {
          console.log(this.props.imageIndex);
          // index logs okay
          console.log(this.props.images[0]);
          // shows correct object in the array
          console.log(this.props.images[this.props.imageIndex]);
          // again shows correct object in array
          console.log(this.props.images[this.props.imageIndex].publicid);
          // TypeError: Cannot read property 'publicid' of undefined
    
          return (
            <div onClick={this.handleClick.bind(this)}>
              <div className="image-box-content">
              </div>
            </div>
          );
        }
      }
    
      render() {
        return (
          <div>
            {this.renderImages()}
          </div>
        );
      }
    }
    
    function mapStateToProps(state) {
      return {
        auth: state.auth,
        successMessage: state.auth.success,
        errorMessage: state.auth.error,
      };
    }
    
    
    export default connect(mapStateToProps, actions)(ImageBox);
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Rohith Murali    7 年前

    renderImages() {
          console.log(this.props.imageIndex);
          // index logs okay
          console.log(this.props.images[0]);
          // shows correct object in the array
          console.log(this.props.images[this.props.imageIndex]);
          // again shows correct object in array
          if(this.props.images[this.props.imageIndex])
          console.log(this.props.images[this.props.imageIndex].publicid);
          // TypeError: Cannot read property 'publicid' of undefined
    
          return (
            <div onClick={this.handleClick.bind(this)}>
              <div className="image-box-content">
              </div>
            </div>
          );
        }
      }
    
        2
  •  0
  •   Isaac    7 年前

    let images = [{id: 1, publicid: "1234" }, {id: 2, publicid: "5678"}];
    let imageIndex = 0;
    
    console.log(images);
    // [{id: 1, publicid: "1234" }, {id: 2, publicid: "5678"}]
    
    console.log(imageIndex)
    // 0
    
    console.log(images[0].publicid)
    // 1234
    
    console.log(images[imageIndex])
    // {id: 1, publicid: "1234" }
    
    console.log(images[imageIndex].publicid)
    // Cannot read property 'publicid' of undefined

    this.props 从您的代码中证明您的代码完全正常工作。在您的 console.log