在 React 中使用 Axios 从 JSON 服务器中删除 <button>

Using Axios to delete from a JSON server in React with a <button>

在我当前的应用程序中,我从 JSON 服务器获取内容并在它们旁边显示删除 <button>。我想在使用 window.confirm 时删除一个条目以向用户确认他们是否真的要删除该条目。相反,一旦应用程序加载确认 window 弹出并检查每个条目并将它们全部删除。

删除处理程序方法:

const handleDelete = person => {
    axios
    .delete(`${baseURL}/${person.id}`)
    .then(response => {
      window.confirm(`Delete ${person.name}?`);
      setPersons(null)
    });
  }

显示方式:

const filteredNames = persons.filter(person => person.name.toLowerCase().includes(filter.toLowerCase()))
  
  const row_names = () => {
    return(
      filteredNames.map(person => 
      <p key={person.id}>{person.name} {person.number} <button onClick={handleDelete(person)}>delete</button></p>));
    }

JSON

{
  "persons": [
    {
      "name": "Arto Hellas",
      "number": "(123) 222-9000",
      "id": 1
    },
    {
      "name": "Ada Lovelace",
      "number": "(281) 555-1000",
      "id": 2
    },
    {
      "name": "Dan Abramov",
      "number": "(713) 287-6900",
      "id": 3
    }
  ]
}

最后,当我使用 axios.post 添加条目时,我的控制台显示 index.js:1 Warning: Each child in a list should have a unique "key" prop.,我认为 axios 处理自动 ID'ing。当我添加条目时,JSON 文件使用新条目及其 ID 成功更新,是否还有其他事情需要完成?

onClick={handleDelete(person)}

这会立即执行该函数,并将其作为参数传递 person。如果函数 returns 是一个值(在您的情况下不是),那么该值将分配给 onClick.

您必须传递函数而不执行它。有两个主要的 ways/syntaxes 可以做到这一点:

onClick={ handleDelete.bind(this, person) }

它只是将函数绑定到上下文和可选参数而不执行它,或者按照@Martin 的建议:

onClick={ () => handleDelete(person) }

这是一个匿名函数,当它在点击时执行,将依次执行 handleDelete(person)