为什么我的onClick事件没有在React上触发?

ep84

我无法找出为什么我的onClick事件无法在我的React应用程序中正常工作。

我正在尝试div用字母表中的字母创建sdiv单击s之一时div应将其及其字母从行中删除。

我已经将该onClick事件div作为状态中字母字符串映射的一部分附加s上,但是我似乎丢失/忽略了一些东西,因为我根本无法单击divs。

我确保将函数绑定到构造函数中。

let { Grid, Row, Col } = ReactBootstrap;

class Letter extends React.Component {
  
  render () {
    const style = { border: '1px solid black',
                    display: 'inline-block',
                    fontSize: '4vw',
                    width: '4vw',
                    height: '8vh',
                    textAlign: 'center'};
    
    return (<div style={style} key={this.props.key}>
              {this.props.letter}
            </div>);
    
  }
}

class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    
    this.state = {
      alpha: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    };
    
    this.callLetter = this.callLetter.bind(this);
  }
 
  callLetter(e) {
    var letterindex = this.state.alpha.indexOf(e.currentTarget.attributes[0].value);
    var alphaclone = this.state.alpha;
    
    alphaclone = alphaclone.slice(0, letterindex) + alphaclone.slice(letterindex + 1);
    
    this.setState({alpha:alphaclone});
  }
  
  render() {

    return (   
      <Grid>
        <Row className="show-grid" >
          {this.state.alpha.split('').map((item, i) =>
            (
                <Letter letter = {item} key = {i} onClick = {this.callLetter}/> 
            ))}
        </Row>
      </Grid>
    );
  }  
}

ReactDOM.render(
  <MyComponent/>,
  document.getElementsByClassName('container-fluid')[0]
);

谢谢。

肯尼斯·特龙

您需要添加onClick到Letter组件中。

(您的Letter组件获得一个onClick道具,但未使用它。)

class Letter extends React.Component {

  render () {
    const style = { border: '1px solid black',
                display: 'inline-block',
                fontSize: '4vw',
                width: '4vw',
                height: '8vh',
                textAlign: 'center'};

    return (
      <div 
        style={style} 
        key={this.props.key} 
        onClick={this.props.onClick} // Have to pass onClick to div
      >
        {this.props.letter}
      </div>
    );
  }
}

发生的是onClick是只有DOM元素才知道的属性虽然是一种反应组件创建,所以你需要指定做什么用的onClick

 <Letter letter={item} key={i} onClick={this.callLetter}/> 

注意:上面的代码仅解决了确保onClick被处理的问题。您现在要做的是通过使Letter组件处理事件来确保callLetter获得正确的字母。

class Letter extends React.Component {
  onHandleClick = () => {
    this.props.onClick(this.props.letter);
  };

  render () {
    const style = { border: '1px solid black',
                display: 'inline-block',
                fontSize: '4vw',
                width: '4vw',
                height: '8vh',
                textAlign: 'center'};

    return (
      <div 
        style={style} 
        key={this.props.key} 
        onClick={this.onHandleClick} // Have to pass onClick to div
      >
        {this.props.letter}
      </div>
    );
  }
}

为您的callLetter更改参数以使用字母。

callLetter(letter) {
    var letterindex = this.state.alpha.indexOf(letter);
    var alphaclone = this.state.alpha;

    alphaclone = alphaclone.slice(0, letterindex) + alphaclone.slice(letterindex + 1);

    this.setState({alpha:alphaclone});
  }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我的动作事件没有被触发?

当我使用val()设置select的值时,为什么jquery change事件没有触发?

为什么我的jQuery聚焦(或模糊)事件没有被触发?

为什么我的输入没有触发我的功能

为什么Submit()方法没有触发onsubmit事件?

为什么没有为此MediaStreamTrack触发“结束”事件?

使用React和Redux Hooks,为什么我的动作没有触发?

为什么在mouseup事件上触发我的mousedown事件?

为什么我在SQL Server Management Studio上没有SQL事件探查器?

为什么我的crontab没有触发?

我的onchange事件没有触发!不确定为什么

为什么我的调整大小事件没有触发?

为什么单击或更改事件都没有触发我的功能?

为什么我的窗口滚动事件根本没有触发。其他答案没有解决

为什么我没有在SignalR上收到带有复杂对象作为参数的事件?

为什么没有触发我的ValueConverter?

为什么我的jquery change事件没有触发?

为什么我的ListView ItemClick事件没有被触发?

为什么我动态添加的事件处理程序没有持续触发

为什么在 nodejs 中没有触发标头事件

为什么我的 onNext 没有触发我的 rx 订阅?

为什么在 Android Studio 中单击没有 android:onClick 的 TextView 时会触发 OnClick 事件?

用 Enzyme 开玩笑,为什么在我的 React 组件测试中没有触发“toHaveBeenCalled”?

为什么当我按下 ENTER 键时触发表单中第一个按钮的 onclick(并且没有 keyCode 事件)?

为什么 calc 没有在 onclick 事件属性中定义?

为什么这个 onClick 事件处理程序在我的 create-react-app 中触发两次

看不到为什么我的事件处理程序没有触发我的函数的问题

为什么当我接到电话时,peerjs 和 cordova-plugin-iosrtc 没有触发流上的事件?

为什么我的 Gesturedetector 没有触发我给它的功能?