ruby-on-rails onClick删除按钮删除而不单击

s1ag04yj  于 2023-02-10  发布在  Ruby
关注(0)|答案(3)|浏览(180)

我创建了一个从视频标题列表中删除视频的按钮,当页面呈现时,列表中的所有视频都会被删除。我尝试创建回调handleSubmit,但它做了同样的事情。有什么建议吗?

handleDelete(videoId) {
        this.props.deleteVideo(videoId);
    }

    render() {
        const userVideos = this.props.videos.filter(video => video.owner_id == this.props.currentUser.id)
        const videoList = userVideos.map(video => {
            return (
                <ul key={video.id} className="user-ul">
                    <div className="user-list-item">
                        <h2 className="user-title">{video.video_title}</h2>
                        <h2 className="user-description">{video.video_description}</h2>
                        <h2 className="user-upload-date">uploaded {this.dateCreated(video.created_at)}</h2>
                    </div>
                    <button>Edit video</button>
                    <button className="delete-video" onClick={this.handleDelete(video.id)}>Delete Video</button>
                </ul>
            )
        })

        return (
            <div className="user-container">
                <h1 id="user-initial">{this.props.currentUser.username[0]}</h1>
                <ul className="user-ul">
                    {videoList}
                </ul>
                <div className="user-footer">
                    <h2 className="home-footer-1">@2020</h2>
                    <h2 className="home-footer-2">
                        Made with
                        <svg viewBox="0 0 20 20" className="_3Weix"><path d="M10 18a1.23 1.23 0 01-.8-.4 14.25 14.25 0 00-4.4-3.7C2.5 12.3 0 10.7 0 7.5a5.52 5.52 0 011.6-3.9A5.73 5.73 0 016 2a5.25 5.25 0 014 1.9A5.85 5.85 0 0114 2c2.9 0 6 2.2 6 5.5s-2.5 4.8-4.8 6.4a15.51 15.51 0 00-4.4 3.7 1.23 1.23 0 01-.8.4z" fill="rgb(255,0,0)"></path></svg>
                        NYC
                    </h2>
                </div>
            </div>
        )
    }
uplii1fm

uplii1fm1#

请尝试以下操作

onClick={() => this.handleDelete(video.id)}

这将仅在发生click事件时调用handleDelete方法。

41zrol4v

41zrol4v2#

你可以改变在arrow函数中调用的handleDelect,它会工作,这是因为绑定。
<button className="delete-video" onClick={() => this.handleDelete(video.id)}>Delete Video</button>
您可以尝试的另一种方法是显式地将绑定传递给此函数。
<button className="delete-video" onClick={this.handleDelete(video.id).bind(this)}>Delete Video</button>
我真的建议你看看https://reactjs.org/docs/handling-events.html如何处理事件。

enxuqcxy

enxuqcxy3#

所有事件侦听器(如onClickonHover)都接受一个在事件触发后执行的函数。
您的代码
<button className="delete-video" onClick={this.handleDelete(video.id)}> Delete Video </button>
未将函数分配给onClick,而是返回函数this.handleDelete的值,该函数在每次渲染时执行,因此无需单击即可删除。
正确的方法是为onClick分配一个函数,例如
<button className="delete-video" onClick={(clickEvent)=>this.handleDelete(video.id)}> Delete Video </button>

相关问题