Задать вопрос
victorzadorozhnyy
@victorzadorozhnyy

Как правильно перезагрузить элемент React?

Есть элемент, в котором таблица (получаем ajax при создании), модал для создания новых записей(отдельный элемент).
Как правильно вызывать render для родителя. Нужно опять получить данные таблицы обнулить стейты модала и еще куча всего.

window.location.reload() ищу альтернативу для перегрузки только конкретного элемента

//Кнопка в родителе не работает, только вызывает существующие стейты. 
//А нужно "перезапустить" весь элемент.
<Button  onClick={ ()=>this.forceUpdate() }
                             bsStyle="warning" >forceUpdate</Button>
  • Вопрос задан
  • 7626 просмотров
Подписаться 2 Оценить 2 комментария
Решения вопроса 1
@Aves
Насколько я понимаю, нужно полностью перемонтировать компонент. Можно обернуть в компонент верхнего уровня со свойством key и методом его изменения.
const resetable = Component => class extends React.Component {
  state = {key: 0};
  render() { 
    return <Component
      {...this.props}
      reset={() => this.setState({key: this.state.key + 1})}
      key={this.state.key}
    />;
  }
}
пример
Или без state с forceUpdate
const resetable = Component => class extends React.Component {
  render() {
    return <Component
      {...this.props}
      reset={() => this.forceUpdate()}
      key={Math.random()}
    />;
  }
}

Ну или просто в родительском компоненте сделать то же самое.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Правильная перезагрузка подразумевает обновление модели в storage и автоматический рендеринг дерева компонентов.

Normally you should try to avoid all uses of forceUpdate() and only read from this.props and this.state in render().
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы