【发布时间】:2021-01-30 05:33:12
【问题描述】:
我正在努力删除一个数组。但这是行不通的。删除后我的数组长度和数据保持不变。
这是我的前端反应网页
renderAdmin = (id) => {
if(this.props.auth.user.userType==='normal') return(<td></td>);
return (
<React.Fragment>
<td>
<button onClick={() => this.props.changeStatus(id)}
className="ui button" >Change Status</button>
</td>
<td>
<button onClick={() => this.props.deleteUser(id)}
className="ui button" >Delete User</button>
</td>
</React.Fragment>
);
}
这里我正在获取我的数组的 id。
现在这是我的 redux 动作创建者
export const deleteUser = (id) => (dispatch,getState) => {
const user = JSON.parse(localStorage.getItem('user'));
axios.delete(`/api/users/remove/${id}`, {
headers: {
'Authorization': `${user.token}`
}
}).then((res) => {
console.log(res.data);
dispatch({
type: 'DELETE_USER',
payload: res.data
})
dispatch({
type: 'CREATE_ERROR',
payload: 'User Delete'
})
})
.catch((error) => {
console.error(error)
})
}
首先我将其从后端服务器中删除。这很好用。然后我将 res.data 发送到我的减速器有效负载。 DELETE_USER 无法正常工作。但 CREATE_ERROR 工作正常。
这是我的减速器
export default function (state = [] , action) {
// console.log(action)
switch(action.type) {
case 'ALL_USER' : return action.payload;
case 'EDIT_USER' :
return state.map(user=>{
if(user._id === action.payload._id){
return action.payload;
}
else {
return user;
}
});
case 'DELETE_USER' :
return state.filter(user=>
user !== action.payload
)
default : return state;
}
}
按下删除按钮后,数据从服务器中删除,但 redux 存储始终保持不变。请帮我。 谢谢。
【问题讨论】:
-
你为什么要从
deleteUser在你的catch块的外部 分派CREATE_ERROR? -
CREATE_ERROR 这不完全是因为错误。你可以说,这是为了发送消息。就是这样。
-
user !== action.payload不起作用,因为action.payload将是一个单独的对象实例,因为它来自JSON.parse(即使它确实代表相同的“现实生活”实体)。您应该改为比较._id值。试试这个:return state.filter( u => u._id !== action.payload.whateverTheUserIdPropertyIs ) -
@Dai 现在我明白了。谢谢兄弟。
标签: javascript arrays reactjs redux react-redux