【发布时间】:2019-06-05 15:52:29
【问题描述】:
我使用了 componentDidUpdate 并在其中放置了一个 shift 方法,该方法用于从 JSON 数组中删除一个对象,从而重新呈现显示的帖子,但 shift 方法从数组中独立删除第一个对象,其中我会按帖子上的删除按钮吗?那么,是否有可能绕过删除第一个元素而支持指定要删除的元素?
componentDidUpdate(prevProps, prevState) {
const {posts} = this.props;
const indexPosts = posts.findIndex((post) => post.id === this.state.postId);
if(prevProps.posts !== posts){
this.handleData();
} else if (indexPosts !== -1)
{
this.informationAlert();
const log = posts.splice(indexPosts, 1);
console.log(log);
}
}
编辑:操作
export const deletedPost = (id) => (dispatch) => {
axios
.delete(`https://jsonplaceholder.typicode.com/posts/${id}`, id, {
headers: {
'Content-type': 'application/json'
}
})
.then((post) =>
dispatch({
type: DELETED_POST,
payload: post.data
})
)
.catch((err) => console.log(err));
};
import { FETCH_POSTS, NEW_POST, DELETED_POST, FETCH_COMMENTS, NEW_COMMENT } from '../actions/types';
const initialState = {
items: [],
item: {},
itemComent: [],
itemNewComment: {},
deletedPost: []
};
export default function (state = initialState, action) {
switch (action.type) {
case FETCH_POSTS:
return {
...state,
items: action.payload
};
case NEW_POST:
return {
...state,
item: action.payload
};
case DELETED_POST:
return {
...state,
deletedPost: action.payload
};
case FETCH_COMMENTS:
return {
...state,
itemComent: action.payload
}
case NEW_COMMENT:
return {
...state,
itemNewComment: action.payload
}
default:
return state;
}
}
编辑 2:
const mapStateToProps = (state) => ({
posts: state.posts.items,
newPost: state.posts.item,
deletedPost2: state.posts.deletedPost
});
编辑 3:
handleDeletedPost = (id) => {
this.setState({
postId: id
})
}
编辑 4:
//I added in constructor
this.state: dataPost: '',
//next I create function to load data and send to state dataPost
handleData = (e) => {
const {posts} = this.props;
const {dataPost} = this.state;
const letang = posts;
const postsData = dataPost;
if (postsData.length <= 0) {
this.setState({
dataPost: letang
})
} else {
console.log('stop')
}
}
// next i create in componentDidUpdate this code
componentDidUpdate(prevProps, prevState) {
const {posts} = this.props;
const indexPosts = posts.findIndex((post) => post.id === this.state.postId);
if(prevProps.posts !== posts){
this.handleData();
} else if (indexPosts !== -1)
{
this.informationAlert();
const log = posts.splice(indexPosts, 1);
console.log(log);
}
}
** 当我添加循环 if (indexPosts !== -1) 时,我的数组只被剪切一个对象:-) API 帖子:https://jsonplaceholder.typicode.com/posts/
当您按详细信息然后按删除图标时,可以在此链接上看到结果:https://scherlock90.github.io/api-post-task/
【问题讨论】:
-
你也不应该像那样改变道具。创建一个状态来保存你的变异数组。
-
请发布您的示例数组以及
deletedPost.中的内容 -
@Chase 为什么这是变异数据的错误方法?
-
我添加的第一个帖子可能是您要求的信息。 @kiranvj