当前位置: 首页 > 面试题库 >

如果我在`map`的`onClick`中引用一个方法,为什么我的组件损坏了?

王棋
2023-03-14
问题内容

现在,最愚蠢的事情发生在我的代码上。我有一个项目列表呈现在DOM中,我需要把一个按钮,以调用另一个函数,如果我把按钮这样<button></button>一切正常,但如果我分配一个功能到该按钮,然后一切都下来<button onClick={function}></button>我会告诉你我的代码,看

@connectToStores
export default class Dealers extends Component {

  static contextTypes = {
    router : React.PropTypes.func,
  }

  static propTypes = {
    title : React.PropTypes.func,
  }

  constructor (props) {
    super(props);
    this.state = {
      modal : false,
    }
  }

  static getStores () {
    return [ GetDealersStore ];
  }

  static getPropsFromStores () {
    return GetDealersStore.getState();
  }
  render () {
    let dealersInfo;
    if (this.props.dealerData !== null) {
      dealersInfo = this.props.dealerData.dealersData.map(function(dealer) {
        return (<div key={dealer.DealerId} style={Styles.dealerCard}>
              <Card>
                <CardHeader title={dealer.NickName}
                            subtitle={dealer.DealerId}
                            avatar={dealer.Picture}/>
                <CardText>
                  <FloatingActionButton> ////////////////////////
                    <IconAdd />    //////THIS IS THE BUTTON/////
                  </FloatingActionButton>//////////////////////
                </CardText>
              </Card>
            </div>
        );
      });
    } else {
      dealersInfo = <p>Loading . . .</p>;
    }

    return (
      <Grid>
        <Row>
          <Column><h4>Dealers</h4></Column>
        </Row>
        <div style={Styles.mainCont}>
          {dealersInfo}
        </div>
      </Grid>
    );
  }

  componentWillMount () {
    GetDealersActions.getDealers();
  }

  _openUpdateDealer = () => {
    console.log(123);
  }
}

如您所见,有一条声明

if (this.props.dealerData !== null) {
   ...
}else {
   dealersInfo = <p>Loading . . .</p>;
}

正如我上面粘贴的一切代码工作真棒,但如果添加了<FloatingActionButton onClick={this._openUpdateDealer.bind(this)}><IconAdd /></FloatingActionButton>那么一切都发生故障,所有我在屏幕上看到的是Loading . . .这是else在上面的语句。

所以,我想知道,这里发生了什么反应?


问题答案:

您正在.map操作中间渲染按钮:

this.props.dealerData.dealersData.map(function(dealer) {

它使用不同的值this; 因此,this.props在函数内部不存在。我希望能cannot read property dealerData of undefined在浏览器控制台中看到。

您需要使用可选thisArg参数:

this.props.dealerData.dealersData.map(function(dealer) {
  // ...
}, this);

将映射功能this手动绑定:

this.props.dealerData.dealersData.map(function(dealer) {
  // ...
}.bind(this));

或使用箭头功能(因为您正在使用ES6功能):

this.props.dealerData.dealersData.map((dealer) => {
  // ...
});


 类似资料:
  • 问题内容: 我有一个已创建的组件: 当我打开此页面时,我的中的每个页面都会被调用。如果我喜欢: 我还可以使用匿名函数: 然后它会按预期工作。为什么会这样? 问题答案: 您需要传递对函数的 引用 ,当您这样做时调用函数并传递给从返回的值。您可以使用以下三个选项之一: 1 。使用 2 。使用箭头功能 3 。或从返回函数

  • 我不明白这一点: 没有这个,我可以做到: 为什么在第一种情况下我不能调用hello()方法,而在第二种情况下我可以调用?

  • 问题内容: 我有这个web.xml 突出显示,IDE给出的错误是:“发现无效的内容,从element开始… 我还需要做什么? 问题答案: 使用以下表示法: 但我建议阅读此链接。本教程将使您了解在JSP 2.0的情况下如何避免在web.xml中声明标签库。

  • 我正在尝试创建包含某些值的表的Excel文件。问题是,无论我做什么,Java都会创建损坏的Excel文件(.xlsx、.xlsm)。 更改现有表的列文件的名称已损坏,如果不进行修复,则无法打开它。名称已更改,但由于某些原因,必须修复该文件。创建新表或为现有表创建新列似乎会损坏文件,但我不知道为什么。 这是我的全部代码: 附言:我是Java初学者——我在Java上有三年的Rest时间。我为我的语言道

  • 问题内容: 我正在尝试在hadoop 2.2.0上运行我的PDFWordCount映射减少程序,但出现此错误: 它说我的地图类未知。我在3个VM上有一个带有namenod和2个datanodes的集群。 我的主要功能是: 如果我使用以下命令运行jar: 正如我在上面看到的那样,它作为输出路径并给我错误,而我的主要功能却在运行。 我已经运行了一个简单的WordCount项目,该项目的主要功能与该主要

  • 这是我第一次问问题,如果这看起来很奇怪,很抱歉。这是我的完整代码。和星星分开的线就是断裂的线。