Size: a a a

React: русскоязычное сообщество

2020 April 14

ЮЧ

Юра Чеботаев in React: русскоязычное сообщество
В useController всегда должна передаваться фабрика.
источник

ЮЧ

Юра Чеботаев in React: русскоязычное сообщество
Так вы, получается, на каждый рендер конструируете новый класс.
источник

T

The Fallen Phoenix in React: русскоязычное сообщество
Не
источник

T

The Fallen Phoenix in React: русскоязычное сообщество
А, ну да, согласен
источник

ЮЧ

Юра Чеботаев in React: русскоязычное сообщество
)
источник

ЮЧ

Юра Чеботаев in React: русскоязычное сообщество
Думаю, это валидный кейс, который вы описали.
источник

T

The Fallen Phoenix in React: русскоязычное сообщество
Но инстанс то не будет создаваться
источник

ЮЧ

Юра Чеботаев in React: русскоязычное сообщество
Инстанс да.
источник

ЮЧ

Юра Чеботаев in React: русскоязычное сообщество
Хотя, и инстанс тоже будет.
источник

T

The Fallen Phoenix in React: русскоязычное сообщество
А с точки зрения рантайма это та же функция будет
источник

ЮЧ

Юра Чеботаев in React: русскоязычное сообщество
На, но разные функции.
источник

T

The Fallen Phoenix in React: русскоязычное сообщество
Юра Чеботаев
Хотя, и инстанс тоже будет.
Не, потому что массив депенденсис пуст
источник

ЮЧ

Юра Чеботаев in React: русскоязычное сообщество
Их нельзя будет сравнить.
источник

T

The Fallen Phoenix in React: русскоязычное сообщество
The Fallen Phoenix
В реакте пора уже делать новый хук useController, со следующей семантикой:
function useController(ControllerClass, options) {
 const instance = React.useMemo(() => new ControllerClass(options), [])
 React.useEffect(() => {
   instance.init()
   return () => {
     instance.clean()
   }
 }, []);
return instance;
}
Но только оптимизированный под этот юзкейс
Вот тут
источник

ЮЧ

Юра Чеботаев in React: русскоязычное сообщество
Я понимаю.
источник

T

The Fallen Phoenix in React: русскоязычное сообщество
Юра Чеботаев
Их нельзя будет сравнить.
Так сейчас тоже каждый раз новая функция создается
источник

T

The Fallen Phoenix in React: русскоязычное сообщество
Но не исполняется
источник

ЮЧ

Юра Чеботаев in React: русскоязычное сообщество
Да.
источник

ЮЧ

Юра Чеботаев in React: русскоязычное сообщество
А как я написал — нет.
источник

ЮЧ

Юра Чеботаев in React: русскоязычное сообщество
Юра Чеботаев
Я вижу три кейса здесь:
1. Инстанциация.
2. Реконфигурация.
3. Очистка.

По большому счету, это старый-добрый лайфсайкл, но для контроллеров внутри хуков:

function MyComponent() {
 const instance = useController(MyController, [], [])
}


А теперь магия:

class MyController {
 static get reactHookConfig() {
   return {
     init: 'initialize',
     update: 'update',
     clear: 'tearDown'
   }
 }

 initialize() {}

 update() {}

 tearDown() {}
}
Вот это.
источник