Форум программистов, компьютерный форум, киберфорум
React/ReactJS
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/34: Рейтинг темы: голосов - 34, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 06.01.2019
Сообщений: 43

Удаление элментов из DOM модели

21.04.2020, 11:53. Показов 6753. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, как удаляют элементы из DOM модели на React? На Jquery мы находили элемент по селекторам и удаляли. А здесь как это работает?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.04.2020, 11:53
Ответы с готовыми решениями:

Изменение Dom модели посредством JS
помогите создать html-файл с кнопкой, по нажатию на которую необходимо добавить элемент div с каким-то содержимым на страницу.

Написать скрипт, рекурсивно обходящий дерево DOM страницы dom.html, начиная от корня DOM
Написать скрипт на языке JavaScript, рекурсивно обходящий дерево DOM страницы dom.html, начиная от корня DOM (объект document). ...

Получение Модели DOM (Web ресурса), загруженной JAVA приложением на компе
Всем здравствуйте! Описание проблемы: Есть информационная система работа с которой осуществляется через браузер(IE). Я не являюсь...

18
61 / 46 / 20
Регистрация: 13.06.2019
Сообщений: 101
21.04.2020, 14:24
Элементы могут либо рендериться, либо не рендериться в зависимости от условий. Мы не должны сами удалять элементы, мы меняем условия, стейты, а реакт перерисовывает родительский компонент, который либо содержит, либо не содержит элемент.
0
0 / 0 / 0
Регистрация: 06.01.2019
Сообщений: 43
21.04.2020, 17:52  [ТС]
Ну это да, а как быть с ajax ? Зачем мне такой реакт, который будет только после обновления страницы применять изменения
0
61 / 46 / 20
Регистрация: 13.06.2019
Сообщений: 101
22.04.2020, 10:06
А в чем проблема с ajax? Вы запрашиваете данные, сетаете что-то в стейт когда они приходят, и реакт перерисовывает страницу соответственно стейту.
Вам какую-то конкретную проблему нужно решить?
0
0 / 0 / 0
Регистрация: 06.01.2019
Сообщений: 43
22.04.2020, 10:22  [ТС]
Чтобы реакт пересовал, нужно менять стейт в componentWillReceiveProps(nextProps) ? Вообще проблема -удаление. КОгда я удаляю элементы http запросом, они удаляются в БД , а нужно еще удалить их с DOM модели БЕЗ ПЕРЕЗАГРУЗКИ СТРАНИЦЫ. НЕ хочется подключать Jquery, как эт о сделать на чистом реакте?
0
 Аватар для magnusmax
97 / 90 / 61
Регистрация: 20.10.2013
Сообщений: 300
22.04.2020, 11:58
Код покажите, возможно так Вам быстрее помогут.
JavaScript
1
array.splice(3,1);
0
0 / 0 / 0
Регистрация: 06.01.2019
Сообщений: 43
22.04.2020, 12:05  [ТС]
JavaScript
1
2
3
4
5
6
7
onClickFunc(obj, data) {
     
        var xhr = new XMLHttpRequest();
        xhr.open("DELETE", "api/employees/" + data.id, false);
        xhr.send();
      //  location.reload(true);
    }
Это обработчик нажатия на кнопку удалить элемент. Запрос уходит на сервер и удаляет элемент, а мне нужно теперь, чтобы этот удаленный элемент пропал с dom без перезагрузки страницы, асинхронно. НА JQuery мы находили его на странице и перезатирали $(el).html(""); А в реакте как
0
61 / 46 / 20
Регистрация: 13.06.2019
Сообщений: 101
22.04.2020, 12:17
А в реакте вам не нужно руками удалять элемент, он все равно появится если будет прописан в логике. То что рендерится на экране - всего лишь отображение того что у вас прописано в логике, или хранится в стейте. Если вам не нужен элемент - удаляете его там где он хранится, например, если вы рендерите в цикле список элементов - удаляйте его в списке, тогда он сам исчезнет с экрана при следующей перерисовке. Сложно сказать конкретно как сделать в вашем случае, не видя кода. Если вы только начали изучать реакт, просмотрите какой-нибудь хороший курс целиком, станет понятен принцип его работы.
1
 Аватар для magnusmax
97 / 90 / 61
Регистрация: 20.10.2013
Сообщений: 300
22.04.2020, 12:28
Как то так
JavaScript
1
2
3
4
delete(item){
    const data = this.state.data.filter(i => i.id !== item.id)
    this.setState({data})
  }
1
0 / 0 / 0
Регистрация: 06.01.2019
Сообщений: 43
22.04.2020, 12:36  [ТС]
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
class Employee extends React.Component {
    constructor(props) {
        super(props);
        this.onClickFunc = this.onClickFunc.bind(this);
        this.state = { editState:"" };
        this.onEdit = this.onEdit.bind(this);
    }
    render() {
        return (
            <div className="card">
                <img src={this.props.Data.imageUrl} alt="Name Surname" className="thumbnail"/>
                    <div className="caption">
                    <h3>{this.props.Data.firstName} {this.props.Data.lastName}</h3>
                    <span>{this.props.Data.function}</span>
                    <div className="btn-set">
                        <button onClick={(obj) => { this.onClickFunc(obj, this.props.Data) }}> Delete </button>
                        <button onClick={this.onEdit}> Edit </button>
                    </div>
                </div>
                {this.state.editState}
            </div>);
    }
    onClickFunc(obj, data) {
     
        var xhr = new XMLHttpRequest();
        xhr.open("DELETE", "api/employees/" + data.id, false);
        xhr.send();
      //  location.reload(true);
    }
    onEdit() {
        this.setState({
            editState: <EditUser Data={this.props.Data} /> });
    }
}
 
class EmployeeList extends React.Component {
    constructor(props) {
        super(props);
        this.state = {Data:[]}
    }
    loadData() {
        var xhr = new XMLHttpRequest();
        xhr.open("GET", "api/employees", true);
        xhr.onload = function () {
            var Users = JSON.parse(xhr.responseText);
            this.setState({ Data: Users });
        }.bind(this);
        xhr.send();
    }
    componentDidMount() {
        this.loadData();
    }
    render() {
        return (
            <section className="team">
                <h2>The Team</h2>
                {this.state.Data.map(emp => (
                    <Employee key={emp.id} Data={emp} />
                ))}
            </section>
        )
        };
}
 
ReactDOM.render(<EmployeeList/>, document.getElementById("team"));
Отрисовались элементы на стринице классом EmployeeList, я удалил его на сервере. А что теперь нужно делать с этой коллекцией,чтобы она его не рисовала? Если я перезагружу страницу, то изменения будут видны/ А как сделать,чтобы перерисовка была без обновления страницы. Понимаете ?

Добавлено через 6 минут
а куда встроить эту логику ?
0
 Аватар для magnusmax
97 / 90 / 61
Регистрация: 20.10.2013
Сообщений: 300
22.04.2020, 12:44
Я бы наверное с дочернего компонента при клике пробрасывал айдишку в родительский и в родительском делал запрос на удаление и изменял список и наверное, желательно что бы бекенд отдавал новый список при удалении
1
0 / 0 / 0
Регистрация: 06.01.2019
Сообщений: 43
22.04.2020, 12:56  [ТС]
А каким образом можно пробрасывать ID родительскому, каким-то колбеком или как ? С Jquery было все в сотни раз легче
0
 Аватар для magnusmax
97 / 90 / 61
Регистрация: 20.10.2013
Сообщений: 300
22.04.2020, 13:00
Вот ссылка. Возможно есть решение проще. Привилегия реакта в том, что вы не используете/манипулируете DOM-разметкой напрямую.
0
0 / 0 / 0
Регистрация: 06.01.2019
Сообщений: 43
22.04.2020, 13:09  [ТС]
Ну гугл ставит низкие баллы сайтам, которые юзают этот реакт. Спасибо за советы))
0
22.04.2020, 13:51

Не по теме:

Не по теме конечно, но у гугла есть Angular :)

0
0 / 0 / 0
Регистрация: 06.01.2019
Сообщений: 43
23.04.2020, 14:20  [ТС]
вроде колбэек прокинул и все отрабатывает, но бросает Cannot read property 'Data' of undefined на const data = this.state.Data.filter(i => i.id !== item.id). Пишет как будто this.state undefined. Не знаете в чем причина возможна?

Добавлено через 42 минуты
Забыл забайднить метод к this / Все заработало. Очень легко все, спасибо за наводку
0
 Аватар для magnusmax
97 / 90 / 61
Регистрация: 20.10.2013
Сообщений: 300
23.04.2020, 22:00

Можете выложить весь Ваш код, может кому то пригодится!
0
108 / 76 / 27
Регистрация: 14.11.2016
Сообщений: 260
24.04.2020, 22:42
Я решил подобную проблему так:
JavaScript
1
ReactDOM.unmountComponentAtNode(ReactDOM.findDOMNode(this).parentElement)
Хотя в документации пишут, что ReactDOM.findDOMNode() - это хреновая идея, другого выхода не нагуглилось
0
0 / 0 / 0
Регистрация: 06.01.2019
Сообщений: 43
25.04.2020, 13:39  [ТС]
Нужно сделать колбэк, который будет отрабатывать в родительском элементе, т.е обработчик удаление должен быть в родителе. И затем меняете основную коллекцию в этом обработчике удаления через фильтр как писали выше
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.04.2020, 13:39
Помогаю со студенческими работами здесь

Удаление элементов DOM
Функция работает не корректно. Элементы создаются нормально, а вот удаляются только 5. А надо после что бы все удалялись. Как сделать...

Удаление дочерних узлов (DOM)
Привет! Такой вопрос. Есть элемент elem1, у которого имеются дочерние узлы. Если я с помощью метода removeChild() удалю elem1, то...

DOM+XML удаление тегов по атрибуту
Добрый день. Пытаюсь реализовать удаление дочерних узлов по атрибуту через DOM. В C++ не очень силен, поэтому возможны логические...

Удаление дочерних элементов с использованием DOM
Доброго времени суток. Есть список(ul с id=s), как удалить все пробелы в нем(чтоб елемент...

DOM вставка содержимого и интерактивное добавление/удаление
Ребята, помогите пожалуйста советом, примером или ссылкой... Делаю КР (сайт), а вопрос вот в чем: 1) Необходимо вставить HTML-содержимого...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru