У меня есть компонент реакции, который захватывает URL-адреса изображений из службы. Я беру эти URL-адреса и просто создаю несколько элементов <img .../> для отображения изображений.
В каждой строке есть 1 список изображений. Это работает при начальной загрузке, но когда я начинаю удалять строки (это делается путем сращивания элемента из массива глобального состояния, обрабатываемого с помощью redux), строка удаляется правильно, но изображения не меняются. Кажется, что изображения каждой строки будут «просачиваться».
Вот скриншот:
Я думаю, мне нужно где-то принудительно выполнить повторный рендеринг, может быть, на родительском уровне?
Вот мой код контейнера:
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);
На что похожа функция удаления строки? И попробуйте key = {media.media_url}.
@quirimmo: это не используется и требует очистки.
и как вы уведомите компонент, что изображение было удалено? React отрисовывает снова, только если свойства или внутреннее состояние изменились
@quirimmo: когда элемент вырезается из массива, redux сообщает, что состояние изменилось и требует рендеринга. Вы можете видеть, что это работает правильно, поскольку слова, связанные с удаленной строкой, исчезают, что странно, так это то, что изображения не отображаются правильно
там происходит что-то странное, не могли бы вы создать скрипт / stackblitz, чтобы это проверить?
Я нашел проблему. Родительский контейнер, который использует этот контейнер, должен иметь правильные идентификаторы key = {...}, использование индекса i было недостаточно в этом контейнере, но также и в родительском контейнере.
Индекс @PGT никогда не является хорошим выбором для начала значения ключа. Официальный документ всегда рекомендует использовать вместо него уникальный идентификатор: reactjs.org/docs/lists-and-keys.html#keys



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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