Как описано здесь , при использовании ловушек в библиотеке реагирования вы часто сталкиваетесь с ошибкой реагирования, говорящей hooks can only be called inside the body of a function component
Наиболее вероятной причиной этой ошибки является то, что ваша библиотека ссылается на свой собственный пакет реакции, а выОсновное приложение, так что в итоге вы используете 2 разные копии пакета реагирования.
Одним из типичных решений этой ошибки является обеспечение того, чтобы основное приложение И ваша библиотека использовали точно такой же пакет реакции.
Решением, которое я использую, является:
- cd до
myMainApp/node_modules/react
yarn link
- cd до
myLib
yarn link react
Это решение работает. Мое главное приложение и моя библиотека теперь используют один и тот же пакет реакции.
Но что, если у меня есть несколько основных приложений? Допустим, у меня есть такая структура проекта:
mainApp1 с использованием lib1-1 и lib1-2
mainApp2 с использованием lib2-1 и lib2-2
Оба основных приложения не зависят отдруг с другом. Таким образом, lib1-1 и lib1-2 должны ссылаться на реактивный пакет mainApp1, а lib2-1 и lib2-2 должны ссылаться на реактивный пакет mainApp2
Как мне это сделать? Когда я пытаюсь запустить yarn link
в mainApp2/node_modules/react
, пряжа говорит мне, что уже есть ссылка для реакции.
К сожалению, я не могу использовать yarn link as react2
или что-то подобное.
Любойидеи о том, как это преодолеть?
Примечание: эту проблему можно преодолеть, создав вашу библиотеку (где реакция - это devDependency), зафиксировав ваши изменения в git после каждого изменения и затем обновив библиотеку в вашем основном приложении. Но, конечно, это не решение, так как во время разработки вы хотите ссылаться на свои библиотеки, а не повторно импортировать их из репозитория