Как реагирует решение переопределить компонент - PullRequest
0 голосов
/ 11 июля 2019

Я знаю, что в React есть метод жизненного цикла, называемый shouldComponentUpdate, который по умолчанию возвращает true, и именно поэтому компонент решает обновить

Но как вызывается этот метод жизненного цикла, когда изменяется состояние или реквизиты для этого компонента. Что на самом деле происходит, когда мы получаем новый реквизит или состояние? Когда мы подключаем компонент к избыточному состоянию и mapStateToProps, проверяем ли мы изменение значений внутри компонента? Если нет, то Когда мы ищем изменения в состоянии или реквизите?

когда изменяется реквизит или состояние, как называются методы жизненного цикла? Есть ли у нас слушатель, который вызывает эти методы при изменении реквизита или состояния?

Ответы [ 2 ]

2 голосов
/ 11 июля 2019

Вы должны посмотреть на жизненные циклы обоих, как они работают и в каком порядке вызывается каждый метод. Глядя на изображение реакции жизненного цикла, вы можете увидеть разницу между componentWillMount и componentDidMount и другими, такими как componentDidUpdate, componentWillUpdate и так далее ...

Также вы должны подумать, когда использовать каждый метод

Чтобы обновить состояние, вы вызываете this.setState(), который сообщает, что что-то изменилось, и будет повторно визуализировать дерево компонентов. Если вы используете this.state.data = something реакция не вызовет рендеринга (). Теперь, чтобы обновить реквизит, вам нужно понять, как на самом деле работает render (). Этот ответ обобщен из уже существующего ответа:

Каждый раз, когда render () вызывается реагировать, создается новый виртуальный DOM. где корневой узел - это компонент, для которого вызывается функция рендеринга. Функция render () вызывается, когда состояние или реквизит изменение компонента или любого из его дочерних элементов. Функция render () уничтожает все старые виртуальные DOM-узлы, начиная с корня и создает новый виртуальный DOM.

Чтобы убедиться, что повторный рендеринг компонентов проходит гладко и Эффективный React использует алгоритм Diffing, чтобы сократить время, которое требуется создать новое дерево с временной сложностью O (n), обычно сложность для копирования деревьев> O (n ^ 2). Как это достигается с помощью атрибута «ключ» на каждом из элементов в DOM. React знает, что вместо создания каждого элемента с нуля он может проверьте атрибут «ключ» на каждом узле в DOM. Вот почему вы получаете предупреждение, если вы не установите атрибут «ключ» для каждого элемента, React использует ключи, чтобы значительно увеличить скорость рендеринга.

Реактивный жизненный цикл

Redux Lifecycle

enter image description here

0 голосов
/ 11 июля 2019

Если вы используете библиотеку redux, возможно, ваш компонент не выполнит повторную визуализацию после смены реквизита.Оформить заказ для этой проблемы , чтобы решить проблему изменений реквизита с componentWillReceiveProps

...