gpt4 book ai didi

javascript - 将 Dispatch 传递给 onClick 事件 Redux

转载 作者:行者123 更新时间:2023-11-29 10:05:26 25 4
gpt4 key购买 nike

我正在研究我的第一个 React/redux 应用程序,但在将我的调度操作映射到我的组件中的 onClick 事件时遇到了很多麻烦。

我尝试了几种尝试将 onClick 事件绑定(bind)到调度的变体,但我总是以其中之一结束:

ReferenceError: onMovieClick 未定义

或者当我最终正确地绑定(bind)一个函数时,我会得到一个与dispatch is not defined相关的错误。

我的目标我正在尝试从存储功能中实现过滤器(删除)

actions/movieActions.js

import * as actionTypes from './actionTypes'

export const createMovie = (movie) => {
return {
type: actionTypes.CREATE_MOVIE,
movie
}
};

export const deleteMovie = (id) => {
console.log('action triggered. movie index:' + id)
return {
type: actionTypes.DELETE_MOVIE,
id
}
}

reducers/movieReducers.js

export default (state = [], action) => {
switch (action.type){
case 'CREATE_MOVIE':
return [
...state,
Object.assign({}, action.movie)
];
case 'DELETE_MOVIE':
return [
state.filter(({ id }) => id !== action.id)
]
default:
return state;
}
};

组件/MovieList.js

import React from 'react'
import Slider from 'react-slick'
import { dispatch, connect } from 'react-redux'
import {Icon} from 'react-fa'
import { deleteMovie } from '../../actions/movieActions'

import 'slick-carousel/slick/slick.css'
import 'slick-carousel/slick/slick-theme.css'
import './MovieList.scss'

class MovieList extends React.Component{
constructor(props){
super (props)
}

handleClick(id) {
dispatch(deleteMovie(id))
}

onMovieClick(id){
dispatch.deleteMovie(id)
}

render () {
// Settings for slick-carousel
let settings = {
infinite: true,
speed: 500
}

return (
<div className='col-lg-12'>
{this.props.movies.map((b, i) =>
<div key={i} className="col-lg-2">
<Slider {...settings}>
{b.images.map((b, z) =>
<div className="img-wrapper">
<Icon name="trash" className="trash-icon" onClick={() =>
console.log(this.props.movies[i].id),
onMovieClick(this.props.movies[i].id)
}/>
<img className="img-responsive" key={z} src={b.base64}></img>
</div>
)}
</Slider>
<div className="text-left info">
<h2>{b.title}</h2>
<p>{b.genre}</p>
</div>
</div>
)}
</div>
)
}
}

// map state from store to props

const mapStateToProps = (state) => {
return {
movies: state.movies
}
};

// Map actions to props
const mapDispatchToProps = (dispatch) => {
return {
onMovieClick: (id) => {
dispatch(deleteMovie(id))
}
}
}

export default connect(mapStateToProps, mapDispatchToProps)(MovieList)

如果有人有时间,我希望得到一些建议。

最佳答案

由于您通过连接传递 onMovieClick,因此您实际上可以从 MovieList 组件 Prop 调用它。首先,我会删除 MovieList 组件中的 onMovieClick 方法定义,然后在 Icon 的 onclick 处理程序中使用 this.props.onMovieClick 像这样:

<Icon name="trash" className="trash-icon" onClick={() =>
console.log(this.props.movies[i].id),
this.props.onMovieClick(this.props.movies[i].id)
}/>

关于javascript - 将 Dispatch 传递给 onClick 事件 Redux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44537810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com