меняю язык программы, мне нужно, чтобы все компоненты осуществили ререндер, как это сделать?
самому рутовому компоненту вашего приложения можно выставить key={lang} и при обновлении этого компонента будет полный апдейт
Не. Только до PureComponent, sCU и memo, дальше этот апдейт не пойдет )
Никак. Нет таких средств.
Могу ошибаться, но вроде как нет. Потому что при изменении ключа реакт оптимизирует обсчёт изменений и считает что компонент и все его дети абсолютно точно изменились и дешевле их перерисовать, вместо того чтобы идти по дереву дальше искать изменения
А... гм... возможно... это надо проверить на самом деле
Скажем так - я такой хак использовал ровно для этого (когда мне надо было точно перемаунтить компоненты ниже по дереву), и оно меня не подводило
Вот я поэтому написал "проверить"... мне кажется в этом случае будет не ререндер, а ремаунт (т.е. построится новое дерево). Это может иметь довольно далеко идущие последствия если под рутом будет навигация, провайдеры всяких сторов, и прочих сервисных вещей
Да, скорее всего будет именно ремаунт. Если нужен именно ререндер, то можно попробовать из кишков реакта достать все инстансы компонентов, и сделать им forceUpdate()
Обсуждают сегодня