React Filter State Not Rerendering

时间:2018-05-09 19:12:44

标签: reactjs async-await axios

我有一个句柄删除,它向服务发出请求。

  handleDelete = async studentId => {
    try {
      await axios.delete(`/students/${studentId}`).then(() =>
        this.setState({
          students: this.state.students.filter(
            student => student._id !== studentId
          ),
        })
      )
    } catch (e) {
      console.log(`Error: ${e}`)
    }
  }

当我提交axios.delete而只是致电this.setState时,它会像我想要的那样过滤。

为什么我不能强迫用新数据重新登记状态?

编辑:这是我在后端删除的功能。

exports.deleteStudent = async (req, res) => {
  try {
    await Student.findByIdAndRemove(req.params.studentId)
    res.status(204)
  } catch (e) {
    console.log(`Error: ${e}`)
  }
}

1 个答案:

答案 0 :(得分:1)

由于您使用async-await,因此需要解决承诺。还可以使用functional setState

handleDelete = async studentId => {
    try {
        await axios.delete(`/students/${studentId}`)
        this.setState(prevState => ({
          students: prevState.students.filter(
            student => student._id !== studentId
          )
        }))
    } catch (e) {
      console.log(`Error: ${e}`)
    }
  }

有关sprintf

的详细信息,请查看此处