Функциональный компонент React, как выполнить повторный рендеринг после удаления данных

Попытка удалить элемент из базы данных из списка с помощью кнопки.

Данные удаляются при нажатии, но компонент не удаляется со страницы.

Как мне сделать повторный рендеринг после его удаления?

Я не использую сокращение для этого

const EmailItem = ({email}) => (

  <div>
    <h3>{email}</h3>
    <button
      onClick = {(e) => {
      e.preventDefault()
      axios.delete("/api/emails/delete/", {
        data: {email: email}
      })
      }
    }
    >
      Remove
  </button>
  </div>
)

экспорт по умолчанию (EmailItem)

это похоже на проблему для картины потока.

Daniel A. White 28.07.2018 03:50
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
1
1 025
1

Ответы 1

Передайте обработчик / обратный вызов в реквизитах как onDelete от родителя. Вызов onDelete внутри axios success вызовет тело обратного вызова, определенное в parent ... где, по сути, у вас будет условное состояние для отображения или скрытия этого компонента.

Parent extends React.component {
constructor {
    this.state = {
      showEmail: true
    }
}
hideEmail =()=>this.setState({showEmail:false})
render(){
this.state.showEmail && {
<EmilItem onDelete = {hideEmail} email = {your email}/>
}
}

а затем измените существующий EmailItem на:

const EmailItem = ({email, onDelete}) => (

и обработчик:

onClick = {(e) => { e.preventDefault();   

axios.delete("/api/emails/delete/",    { data: {email: email} }).then(){
onDelete()
} }

Да, в этом случае компонент EmailItem не управляет состоянием, отвечающим за обновление рендеринга на экране. Таким образом, вы должны передать некоторый параметр функции, чтобы вызвать обратный вызов по нажатию кнопки и удалить содержимое электронной почты. Хороший пример!

rfschroeder 28.07.2018 04:32

При изменении состояния родительского компонента не будут скрыты все компоненты EmailItem?

Sierra Kilo 28.07.2018 05:36

Я должно быть делаю что-то не так, я не могу заставить это работать.

Sierra Kilo 28.07.2018 05:49

Когда я добавляю обещание, оно выдает ошибку, когда я удаляю обещание, оно меняет состояние на false и скрывает все элементы электронной почты.

Sierra Kilo 28.07.2018 05:58

@vijay есть идеи?

Sierra Kilo 28.07.2018 06:25

@sierra, не могли бы вы предоставить какой-либо образец кода, где я могу увидеть, как он работает, и помочь вам решить проблему.

Vijay 28.07.2018 13:57

Другие вопросы по теме