javascript - 点击事件的不同操作

标签 javascript reactjs onclick click

所以我有一个绑定(bind)到我的按钮的函数,它应该在每次单击时执行不同的操作;返回值将在另一个 getter 内部使用,我将在 render 内部调用它,从而使我无法在这种情况下使用 setState。

class awesomeFruits extends React.Component {

  ... constructor stuff etc

  clickSomething () {
    let fruit = 'banana'
    let clickThing = 1
    clickThing++

    // please notice that I only need 3 actions
    if (clickThing === 1) {
      fruit = 'apple'
    } else if (clickThing === 2) {
      fruit = 'grape'
    } else {
      fruit = 'pineapple'
      clickThing = 1 // reset click
    }

    return fruit
  }

  get fruitOfChoice () {
    ... non related stuff
    this.clickSomething()
  }
}

然后在我的渲染函数中:

render () {
  return <button onClick={this.clickSomething.bind(this)}>CLICK FRUIT</button>
    <p>this.fruitOfChoice</p>
}

我正在学习 React 和 JS,所以我不确定这是否主要是一个 React 问题。使用 vanilla JS,我可以通过将 clickThing 声明为零作为全局变量来使其工作,但我不知道如何使用 React 正确执行此操作。

为了使问题更精确: 如何在每次点击时执行不同的操作,用我想要的结果更新渲染?

任何反馈表示赞赏,即使我必须重新制作以上所有内容

最佳答案

问题出在 clickSomething 的声明中。每次执行时,它都会将 clickThing 重置为 1。正如您在问题中指出的那样,您需要将 clickThing 的初始声明移到函数执行之外。我的做法如下:

        class awesomeFruits {
            constructor() {
                this.fruits = ['banana', 'grape', 'pineapple'];
                this.clickThing = -1;  // Starting this out at -1 so the first execution increments it to 0, and it hits the first index of your fruits array;
            }
            clickSomething () {
                if(this.clickThing === (this.fruits.length - 1)) {
                   this.clickThing = 0;
                } else {
                   this.clickThing++;
                }
                return this.fruits[this.clickThing];
            }
        }

        const fruitPicker = new awesomeFruits;
        document.getElementById('testMe').addEventListener('click',() => {
            console.log(fruitPicker.clickSomething());
        })
<button id="testMe">Pick a fruit</button>

将水果名称放入数组中更加清晰,并且允许您稍后使用最少的代码添加更多内容。

最后,这可能不是您想要的,但如果您想输出随机水果,this.clickThing = Math.round(Math.random() *fruits.length-1 ) 会给你一个随机数,不超过水果数组的最高索引。

关于javascript - 点击事件的不同操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39338217/

相关文章:

javascript - 检查对象键是否具有属性(如果有),检查值的 .length

reactjs - 使用 redux 和 React 测试异步操作创建器时,无法读取未定义的属性 '.then'

javascript - 测试 - React 无状态组件,使用 sinon 监视组件方法

javascript - 没有 JSX 的 ReactJS

javascript - Django-tinymce 未加载 javascript

javascript - 数据库日期和今天日期之间的差异

javascript - 使用 GPS 监测移动设备的位移

android - 如何在 GridView 中处理卡片按钮的 OnClick 事件?最佳实践

javascript - 如何从列表中清除选定的元素

javascript - Jquery 获取属性值变化