Обновите свойство State из ответа axios, если разница между ними - PullRequest
0 голосов
/ 08 февраля 2019

Я хочу найти способ сравнить предстоящий ответ от axios со свойством текущего состояния, и только если они отличаются, используйте setState с ответом для замены этого свойства.В противном случае пропустите использование setState, потому что они равны

componentWillReceiveProps(nextProps: Readonly<Props>, nextState: Readonly<State>): boolean {

        if (nextProps.isReloading !== this.state.isReloading) {
            // HERE we just confirm to proceed and change this prop
            this.setState({
                isReloading: nextProps.isReloading,
            });
            getData('/some-end-point')
                    .then((response: any) => { 
                      const newItems = response.data;

Уже зарегистрированы и подтверждены, что они равны, но следующая строка возвращает NO

                     this.state.items == newItems ? 'YES' : 'NO';

И после этого, только если отличается, обновите текущее состояние с новым

                    })
                    .catch((error: any) => {
                        console.log(error);
                    });
            return true;
        }

        return false;
    }

1 Ответ

0 голосов
/ 08 февраля 2019

Я предполагаю, что newItems - это массив,

, просто сравнение их с == или === не сработает (по разным причинам это не получится)

- этоесть ли преимущество в том, чтобы не заменять this.state.items, если оно одинаковое?

Если так важно, чтобы вы не вызывали setState, если они одинаковые, вы можете сравнить их, зациклив массив и сравнивая каждый элемент массива

newItems.length === this.state.items.length && newItems.sort().every((value, index)=> value === this.state.items.sort()[index]);

Это предполагает, что каждый элемент в вашем массиве является string или number, если какой-либо из элементов является другим массивом или объектом, вы должны сделать аналогичное сравнение в каждомelement

Вы можете использовать lodash isEqual, чтобы сделать это, я полагаю

...