это будет означать, что каждый раз, когда входящие реквизиты меняются, они немедленно отражаются в состоянии
Да, это неправильно. Когда я только начинал, я делал то же самое.
state
- это нечто, «принадлежащее» этому компоненту (примечательно: не все компоненты вообще нуждаются в состоянии!). props
- это то, что «принадлежит» более высокому компоненту.
Лучший пример:
ComponentA передал идентификатор ComponentB в качестве опоры. ComponentB использует этот идентификатор для выполнения запроса API (например).
Статус / результаты этого запроса API формируют часть состояния ComponentB (он «принадлежит» вашему компоненту). Идентификатор, переданный как опора, НЕ является частью состояния ComponentB (он принадлежит ComponentA или может быть где-то выше в дереве, которое передало его как опору в ComponentA).
Когда свойство id изменяется, ComponentB будет необходимо сделать еще один запрос API.
EDIT:
Сложность методов жизненного цикла является причиной того, что React настоятельно рекомендует функциональные компоненты.
Вы должны думать о компонентах как о функциях. Намного проще написать logi c, если вы думаете об этом как о вводе -> выводе.
componentDidUpdate
был перемещен в useEffect
со списком зависимостей, так что вы можете сказать - запустите это функция, но только когда эта опора изменяется - это хороший способ разбить массивные componentDidUpdate
методы на крошечные читабельные / проверяемые фрагменты.
Я слышал, что многие люди говорят, что хуки разрушили реакцию, но я категорически не согласен с ними. React увидел проблемы, с которыми люди сталкивались в сообществе из-за неправильного использования компонентов на основе классов / экземпляров, и вместо того, чтобы читать лекции о том, как их правильно использовать, они подтолкнули людей к написанию более качественных компонентов, внедрив более простые API-функции, хотя они все еще могут и будут злоупотреблять - с ними обычно проще иметь дело, чем с классами, и они хорошо согласуются с композицией над наследованием и декларативным над императивом.