javascript - 使用 splice() 删除项目
问题描述
我在一个组件中显示了一些通过 API 调用和.map
方法获得的电影。当我尝试将一个项目删除到此电影列表中时,仅对最后一个项目进行删除。我使用该splice()
方法并为我的deleteMovieFromFav()
函数提供索引。我不知道我错过了什么..有人知道该怎么做吗?
删除电影的功能:
deleteMovieFromFav = (idx) => {
let { movies } = this.props.movieReducer;
movies.splice(idx, 1)
this.setState({movies: [...movies]})
}
onClick
删除电影:
{
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>
)
})
}
解决方案
我使用了 redux 并创建了一个从收藏夹中删除电影的操作,现在它是第一个被删除的元素。我希望我的 deleteMovie 操作对已添加为收藏夹的电影的 id 进行操作,但我有仅在而不是在 redux 中访问此 id .map
..
movieReducer
这里:
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;
}
}
movieActions
这里:
import { ADD_MOVIE, DELETE_MOVIE } from '../actionType/movies'
export const deleteMovie = (movie) => {
console.log('movieid', movie)
return {
type: DELETE_MOVIE,
payload: movie
}
}
推荐阅读
- javascript - 在 Chrome 扩展程序中维护状态和消息
- schema - 如何在 Schemathesis 中为每种情况添加随机整数?
- typescript - 将“keyof typeof”与 Object.keys() 一起使用时忽略打字稿中的“唯一符号”
- triggers - 记录触发流的预定路径 - 将来运行什么版本的记录?
- angular - 角度量角器拖放测试
- asp.net-core - 检索内存缓存包装类中的总缓存大小
- php - 无法解密 session.cookie 对于 Laravel 7.30
- reactjs - 无法在 vscode 中输入字母 F
- python - TimedRotatingFileHandler 缺少一些日志
- python - 使机器人每 10 秒更改一次状态