Javascript 删除带有接头()的项目

Javascript 删除带有接头()的项目,javascript,reactjs,Javascript,Reactjs,我在组件中显示通过API调用和.map方法获得的一些电影。当我尝试将一个项目删除到此电影列表中时,删除仅在最后一个项目上完成。 我使用splice()方法,并为我的deleteMovieFromFav()函数提供索引。 我不知道我错过了什么。。 有人知道怎么做吗 删除电影的功能: deleteMovieFromFav = (idx) => { let { movies } = this.props.movieReducer; movies.splice(idx, 1)

我在组件中显示通过API调用和
.map
方法获得的一些电影。当我尝试将一个项目删除到此电影列表中时,删除仅在最后一个项目上完成。 我使用
splice()
方法,并为我的
deleteMovieFromFav()
函数提供索引。 我不知道我错过了什么。。 有人知道怎么做吗

删除电影的功能:

deleteMovieFromFav = (idx) => {
    let { movies } = this.props.movieReducer;
    movies.splice(idx, 1)
    this.setState({movies: [...movies]})
}
{
 this.props.movieReducer.movies.map((movie, idx) => {
  return(
   <div key={idx}>
    <Snackbar
      action={[
       <Button key="undo" color="secondary" size="small" 
        onClick={() => {
         this.deleteMovieFromFav(idx)
         this.handleCloseAlert()
        }}> Yes
       </Button>,
       <Button 
        key="no" 
        color="secondary" 
        size="small" 
        onClick={() => this.handleCloseAlert()}>
      ]}
    />
  </div>
 )
})
}
import { DELETE_MOVIE } from '../actionType/movies'

const initialState = {
  movies: []
};

export default (state = initialState, action) => {
  switch(action.type){
    case DELETE_MOVIE: 
      let selectedMovies = state.movies
      selectedMovies.splice(action.payload, 1)
      return {...state, movies: [...selectedMovies]};
    default:
      return state;
  }
}
import { ADD_MOVIE, DELETE_MOVIE } from '../actionType/movies'
export const deleteMovie = (movie) => {
  console.log('movieid', movie)
  return {
    type: DELETE_MOVIE,
    payload: movie
  }
}
onClick
删除电影:

deleteMovieFromFav = (idx) => {
    let { movies } = this.props.movieReducer;
    movies.splice(idx, 1)
    this.setState({movies: [...movies]})
}
{
 this.props.movieReducer.movies.map((movie, idx) => {
  return(
   <div key={idx}>
    <Snackbar
      action={[
       <Button key="undo" color="secondary" size="small" 
        onClick={() => {
         this.deleteMovieFromFav(idx)
         this.handleCloseAlert()
        }}> Yes
       </Button>,
       <Button 
        key="no" 
        color="secondary" 
        size="small" 
        onClick={() => this.handleCloseAlert()}>
      ]}
    />
  </div>
 )
})
}
import { DELETE_MOVIE } from '../actionType/movies'

const initialState = {
  movies: []
};

export default (state = initialState, action) => {
  switch(action.type){
    case DELETE_MOVIE: 
      let selectedMovies = state.movies
      selectedMovies.splice(action.payload, 1)
      return {...state, movies: [...selectedMovies]};
    default:
      return state;
  }
}
import { ADD_MOVIE, DELETE_MOVIE } from '../actionType/movies'
export const deleteMovie = (movie) => {
  console.log('movieid', movie)
  return {
    type: DELETE_MOVIE,
    payload: movie
  }
}
{
this.props.movieReducer.movies.map((movie,idx)=>{
返回(
对
,
this.handleCloseAlert()}>
]}
/>
)
})
}

我使用了redux,创建了从收藏夹中删除电影的操作,现在它是第一个被删除的元素。。我希望我的deleteMovie操作对作为收藏夹添加的电影的id进行操作,但我只能在
.map
中访问此id,而不能在redux中访问此id

movieReducer
此处:

deleteMovieFromFav = (idx) => {
    let { movies } = this.props.movieReducer;
    movies.splice(idx, 1)
    this.setState({movies: [...movies]})
}
{
 this.props.movieReducer.movies.map((movie, idx) => {
  return(
   <div key={idx}>
    <Snackbar
      action={[
       <Button key="undo" color="secondary" size="small" 
        onClick={() => {
         this.deleteMovieFromFav(idx)
         this.handleCloseAlert()
        }}> Yes
       </Button>,
       <Button 
        key="no" 
        color="secondary" 
        size="small" 
        onClick={() => this.handleCloseAlert()}>
      ]}
    />
  </div>
 )
})
}
import { DELETE_MOVIE } from '../actionType/movies'

const initialState = {
  movies: []
};

export default (state = initialState, action) => {
  switch(action.type){
    case DELETE_MOVIE: 
      let selectedMovies = state.movies
      selectedMovies.splice(action.payload, 1)
      return {...state, movies: [...selectedMovies]};
    default:
      return state;
  }
}
import { ADD_MOVIE, DELETE_MOVIE } from '../actionType/movies'
export const deleteMovie = (movie) => {
  console.log('movieid', movie)
  return {
    type: DELETE_MOVIE,
    payload: movie
  }
}
电影动作
此处:

deleteMovieFromFav = (idx) => {
    let { movies } = this.props.movieReducer;
    movies.splice(idx, 1)
    this.setState({movies: [...movies]})
}
{
 this.props.movieReducer.movies.map((movie, idx) => {
  return(
   <div key={idx}>
    <Snackbar
      action={[
       <Button key="undo" color="secondary" size="small" 
        onClick={() => {
         this.deleteMovieFromFav(idx)
         this.handleCloseAlert()
        }}> Yes
       </Button>,
       <Button 
        key="no" 
        color="secondary" 
        size="small" 
        onClick={() => this.handleCloseAlert()}>
      ]}
    />
  </div>
 )
})
}
import { DELETE_MOVIE } from '../actionType/movies'

const initialState = {
  movies: []
};

export default (state = initialState, action) => {
  switch(action.type){
    case DELETE_MOVIE: 
      let selectedMovies = state.movies
      selectedMovies.splice(action.payload, 1)
      return {...state, movies: [...selectedMovies]};
    default:
      return state;
  }
}
import { ADD_MOVIE, DELETE_MOVIE } from '../actionType/movies'
export const deleteMovie = (movie) => {
  console.log('movieid', movie)
  return {
    type: DELETE_MOVIE,
    payload: movie
  }
}

拼接减速器毫无意义。减速机是一种功能,拼接操作在阵列上。
movies
实际上给了你什么?@jmargolisvt似乎你被一个变量名挂断了?那么为什么你在地图上使用道具,而使用状态?这里似乎出现了不匹配的情况。因为当您更新它时,会显示将其传递到
mapDispatchToProps
而不是传递到您的本地州。我使用减速机,因为我在组件中显示API的所有电影,因此按钮允许您将电影添加到最喜爱的组件,在这种情况下,这里添加的电影是最喜欢的电影。因此,在我的
deleteMovieFromFav()
函数中,
movies
变量对应于作为收藏夹添加的电影。我希望我已经说清楚了。当调用此
deleteMovie
操作时,您可以尝试将索引作为参数从该位置发送吗?