【问题标题】:SetState not functioning while using this as a parameter to bind (ReactJS)使用 this 作为绑定参数时 SetState 不起作用(ReactJS)
【发布时间】:2020-07-31 11:56:30
【问题描述】:

我在由 onClick 激活的 map 函数中有一个绑定函数,但我无法访问此函数,因为似乎使用 this 作为参数会停止 setState 工作。本来 buttonPress 函数中的 setState 可以工作,但现在我添加了 bind(this, (key)) 以允许 key 参数通过,它跳过了 setState,我只能使用 console.log()。

一切的目的是识别点击了哪些条目,然后将其作为道具传递给子类组件。

map() 函数

<div ref={p => this.MyMenu = p} className="mainmenu">
<p className="title">Song List</p>
    <div className="songList">
        {song.map(song => (<div onClick={this.buttonPress.bind(this, song.key)}  key={song.key}  className="song-entry">
            <h3 className="song-name">{song.name}</h3>
            <p className="song-length">{song.length}</p>
            <p className="song-desc">{song.desc}</p>
        </div>))
        }

    </div>

    </div>

这里是按钮按下功能

buttonPress (key) {

    console.log(key);

    let localkey = key 


    this.setState({songchoice: localkey});

    console.log(this.state.songchoice);

    clearInterval(this.countdownInterval);
    this.setState({count:3, countdown:true, songchoice: key}, 
        ()=>{setInterval(this.countdownInterval, 3000); this.aboutTween = TweenMax.to(this.aboutSection, .8,{opacity:1, y: -100, ease: Power3.easeOut})});

}

如果您想查看整个页面,也可以使用 GitHub 链接。

【问题讨论】:

    标签: javascript reactjs parameters binding setstate


    【解决方案1】:

    是否有特定的绑定原因我不知道 也许您可以尝试一下,这是一种更简单的方法,例如

    onClick={ () =&gt; this.buttonPress(song.key)}

    【讨论】:

    • 不,这样不行,错误“TypeError: this.setState is not a function”
    • 在您的组件中,您是否在构造函数中将您的函数与this 绑定?喜欢this.buttonPress = this.buttonPress.bind(this)
    【解决方案2】:

    我想通了。 SetState 实际上是有效的,但因为它是异步设置的,所以控制台日志没有发生反映更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-02
      • 2017-04-24
      • 1970-01-01
      • 1970-01-01
      • 2018-08-02
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      相关资源
      最近更新 更多