Ваша функция DeleteJobs также должна удалить значение задания из состояния, так как ваши данные с сервера извлекаются только при первоначальном рендеринге. Для этого вы можете выставить метод из пользовательского хука и использовать его при вызове DeleteJobs
function useJobs () {
const [jobs, setJobs] = React.useState([])
const [locations, setLocations] = React.useState({})
const [departments, setDepartments] = React.useState({})
const [tags, setTags] = React.useState({})
const deleteJob = (id) => { // function that removes job from state
setJobs(prevJobs => prevJobs.filter(job => job.id !== id));
}
React.useEffect(() => {
fetchJSON('/api/jobs/list-jobs', { headers: headers })
.then(setJobs)
}, [])
....
return [jobs, locations, departments, tags,deleteJob]
}
function DeleteJob (jobid) {
console.log('deletejob fired')
console.log(jobid)
axios({
method: 'delete',
url: '/api/jobs/delete-job/' + jobid,
headers: headers
})
}
export default function Jobs () {
const classes = useStyles()
const [jobs, locations, departments, tags, deleteJob] = useJobs()
return (
...
{jobs.map(job => (
......
<IconButton
aria-label='delete'
style={{ color: 'red' }}
variant='outlined'
onClick={() => {
DeleteJob(job.id);
deleteJob(job.id); // locally delete from state
}}
>
<DeleteIcon />
</IconButton>
...
)
}