Карта неопределенности после удаления элемента - React

Я новичок в React, и в этом случае я чувствую, что должен использовать крючок жизненного цикла, но я не уверен, какой именно. В приведенном ниже коде я вызываю API и получаю список объектов пользователей, который содержит другой список вещей, которыми они владеют, под названием members. Вот так:

Карта неопределенности после удаления элемента - React

При нажатии кнопки «Отключить» я затем сохраняю ссылку в состоянии и отправляю эту резервную копию в API, чтобы отключить члена:

import React, { Fragment } from 'react';

import FormScene from 'nwiadmin/scenes/form';
import Button from 'nwiadmin/components/button';

import { formatDate } from 'nwiadmin/utility/formatters';
import Modal from 'nwiadmin/components/modal';
import ModalActions from 'nwiadmin/components/modal/modalactions';

import SingleBusinesses from 'app/components/businesses';

let businessRef = '';

class UserBusinessSingleScene extends FormScene {
    /* eslint-disable class-methods-use-this */
    setInitialState(props) {
        const pendingData = {
            ...props.data,
        };
        const reference = businessRef;
        const isVisible = false;
        this.setReferenceTarget = this.setReferenceTarget.bind(this);

        return {
            pendingData,
            reference,
            isVisible,
        };
    }

    shouldComponentUpdate(nextProps, nextState) {
        console.info('should cmp update', nextProps, nextState);
        return true;
    }

    UNSAFE_componentWillUpdate(nextProps, nextState) {
        console.info('cmp will update', nextProps, nextState);
    }

    componentDidUpdate(prevProps, prevState) {
        console.info('cmp did update', prevProps, prevState);
    }

    setLabel(data) {
        return data.name;
    }

    setMethod() {
        return 'post';
    }

    setRemote() {
        return `businesses/unclaim?reference=${this.state.reference}`;
    }

    modalToggleHander() {
        this.setState(prevState => ({
            isVisible: !prevState.isVisible,
        }));
    }

    setReferenceTarget() {
        this.setState({ reference: businessRef });
    }

    render() {
        console.info(this.state.reference);
        return (
            <Fragment>
                {this.state.pendingData.members.map(business => (
                    <SingleBusinesses
                        key = {business.reference}
                        name = {business.name}
                        reference = {business.reference}
                        claimed = {`Claimed on: ${formatDate(business.created_at)}`}
                        unlink = {
                            <Button
                                onClick = {() => {
                                    businessRef = business.reference;
                                    this.setReferenceTarget();
                                    this.modalToggleHander();
                                }}
                            >
                                Unlink User
                            </Button>
                        }
                    />
                ))}
                <Modal isOpen = {this.state.isVisible} title = "Are you sure you want to unlink the user?">
                    <ModalActions
                        submit = {() => this.submit()}
                        submitText = "Unlink User"
                        cancel = {() => this.modalToggleHander()}
                    />
                </Modal>
            </Fragment>
        );
    }
}

export default UserBusinessSingleScene;

После отключения я получаю ошибку Uncaught TypeError: Cannot read property 'map' of undefined. Я не уверен на 100%, почему, но я чувствую, что это как-то связано с состоянием и что я должен установить состояние после отключения? Любая помощь приветствуется.

вы пытаетесь повторить undefined. зарегистрируйте свой итератор и посмотрите, почему это так undefined. undefined исходит от - this.state.pendingData.members

Kalpesh Singh 25.02.2019 12:36

Это не undefined изначально. Он становится undefined только после установки reference и публикации в businesses/unclaim?reference=${this.state.reference} - как будто он ищет исходное состояние и не находит несвязанного пользователя? Я не могу зарегистрировать итератор, так как он не определен.

Charlie Coplestone 25.02.2019 13:10

зарегистрируйте весь объект. Возможно, вы переопределяете весь объект.

Kalpesh Singh 25.02.2019 13:21

Ой! Вы, кажется, правы: https://i.gyazo.com/4a1e3b67020e6ade63066a86536bfccd.png Это как-то перезаписывает состояние, чтобы быть пустым? Любая идея из приведенного выше кода, как ему это удается?

Charlie Coplestone 25.02.2019 13:31
this.setState({ reference: businessRef }); виноват. Вы можете использовать Object.assign, чтобы объединить обновленный объект с существующим.
Kalpesh Singh 25.02.2019 14:40

Интересно, а где именно будет реализация для этого? Я только что попытался реализовать это следующим образом: const pendingData = Object.assign({ ...props.data }); без изменений. Не уверены, что это правильный подход?

Charlie Coplestone 25.02.2019 15:53

Это работает? Если да, то не беспокойтесь. Сделайте рефакторинг позже. :)

Kalpesh Singh 25.02.2019 16:57
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
7
75
0

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