配列を削除しようと懸命に努力しています。しかし、それは機能しません。削除した後、配列の長さとデータは同じままです。
これは私のフロントエンドの反応ウェブページです
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ストアは常に同じままです。私を助けてください。ありがとうございました。
オブジェクトが真に等しくないことが原因である可能性があります。代わりに、IDでフィルタリングしてみてください。
return state.filter(user=>
user._id !== action.payload._id
)
または、深い平等を確認してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加