Компонент React некорректно отображается

У меня есть компонент реакции, который захватывает URL-адреса изображений из службы. Я беру эти URL-адреса и просто создаю несколько элементов <img .../> для отображения изображений.

В каждой строке есть 1 список изображений. Это работает при начальной загрузке, но когда я начинаю удалять строки (это делается путем сращивания элемента из массива глобального состояния, обрабатываемого с помощью redux), строка удаляется правильно, но изображения не меняются. Кажется, что изображения каждой строки будут «просачиваться».

Вот скриншот:

Компонент React некорректно отображается

Я думаю, мне нужно где-то принудительно выполнить повторный рендеринг, может быть, на родительском уровне?

Вот мой код контейнера:

class SourceMediaPreviewContainer extends Component {
  constructor(props) {
    super(props);

    this.state = {
      source: {},
      media: [],
    };
  }
  async componentDidMount() {
    const { source: _source } = this.props;
    const { data } = (await this.getMedia({ source: _source })) || {};
    const { media = [], ...source } = data || {};
    this.setState({ source, media });
  }
  async getMedia({ source }) {
    return describeSourceMedia({ source });
  }
  render() {
    return (
      <div className = "asb-source-media-preview">
        {this.state.media.map((media, i) => (
          <img
            key = {media.url}
            className = "asb-source-media-preview__img"
            src = {media.media_url}
            alt = {media.title}
          />
        ))}
      </div>
    );
  }
}

const mapStateToProps = (state) => ({
  // mediaSource: state.asb.mediaSource,
});

const mapDispatchToProps = (dispatch) =>
  bindActionCreators(
    {
      // ...mediaSourceOperations,
    },
    dispatch,
  );

export default connect(
  mapStateToProps,
  mapDispatchToProps,
)(SourceMediaPreviewContainer);

какая пропа mediaSource передана от государства? Похоже, вы никогда не используете его внутри своего компонента

quirimmo 02.01.2019 02:04

На что похожа функция удаления строки? И попробуйте key = {media.media_url}.

chendesheng 02.01.2019 02:05

@quirimmo: это не используется и требует очистки.

PGT 02.01.2019 02:05

и как вы уведомите компонент, что изображение было удалено? React отрисовывает снова, только если свойства или внутреннее состояние изменились

quirimmo 02.01.2019 02:07

@quirimmo: когда элемент вырезается из массива, redux сообщает, что состояние изменилось и требует рендеринга. Вы можете видеть, что это работает правильно, поскольку слова, связанные с удаленной строкой, исчезают, что странно, так это то, что изображения не отображаются правильно

PGT 02.01.2019 02:09

там происходит что-то странное, не могли бы вы создать скрипт / stackblitz, чтобы это проверить?

quirimmo 02.01.2019 02:10

Я нашел проблему. Родительский контейнер, который использует этот контейнер, должен иметь правильные идентификаторы key = {...}, использование индекса i было недостаточно в этом контейнере, но также и в родительском контейнере.

PGT 02.01.2019 04:17

Индекс @PGT никогда не является хорошим выбором для начала значения ключа. Официальный документ всегда рекомендует использовать вместо него уникальный идентификатор: reactjs.org/docs/lists-and-keys.html#keys

blaz 02.01.2019 09:02
Поведение ключевого слова "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
8
255
0

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