Не перемонтируйте компонент, а измените значения

У меня есть компонент, который отображает некоторые значения с идентификатором изображения ведра s3. создали один дочерний компонент, который будет обращаться к серверу aws и получать URL-адрес изображения. установили загрузчик до тех пор, пока не будет выполнен вызов API. после того, как URL-адрес будет получен из вызова, загрузчик остановится и изображение будет визуализировано.

Проблема: У меня есть некоторая операция со значениями, которую нужно выполнить. как поддержание значений, увеличение-уменьшение.

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

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

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

Спасибо.

Не могли бы вы включить код вашего компонента? Помогло бы ответить на вопрос.

Cameron Downer 24.08.2018 12:11

@CameronDowner обновили вопрос. пожалуйста, проверь это.

Ashish 24.08.2018 12:15

Не могли бы вы также включить <LoadImage />? Я думаю, что в этом проблема.

Cameron Downer 24.08.2018 12:18

нет никаких проблем с загрузкой изображения. там все нормально работает. я хочу здесь, я не хочу, чтобы изображения были перемонтированы. <LoadImage /> Компонент просто получает отсюда идентификаторы и выполняет вызовы корзины s3 для получения URL-адресов. и поместите этот URL в тег img.

Ashish 24.08.2018 12:20

@CameronDowner, все еще обновил мой вопрос. вы можете увидеть код компонента loadImage там

Ashish 24.08.2018 12:22
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
5
86
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что проблема в методе componentWillReceiveProps в <LoadImage />

componentWillReceiveProps(nextProps){
        if (this.props !== nextProps) {
            this.setState({
                image:DefaultImage,
                loading:true
            })
            this._loadImages(nextProps)
        }else{
            this.setState({
                loading: false,
            })
        }
    }

Вы вызываете this._loadImages(nextProps), который можно вызывать снова и снова, когда свойства передаются из компонента владельца.

Даже если вы сравниваете входящие реквизиты, this.props !== nextProps всегда будет истинным, потому что они оба являются объектами. Вы можете увидеть какой-то вопросы по этому поводу.

Вам будет лучше проводить сравнения на конкретных объектах, которые вас интересуют - если вы хотите пойти именно таким путем.

Также следует отметитьcomponentWillReceiveProps устарел, вам следует изучить getDerivedStateFromProps. Посмотреть документы здесь.

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

Ashish 24.08.2018 12:36

Без проблем. Также смотрите мое добавление об использовании getDerivedStateFromProps вместо componentWillReceiveProps :)

Cameron Downer 24.08.2018 12:36

yepp. глядя в это.

Ashish 24.08.2018 12:37

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