React крючки дублируют реагирующую упаковку - PullRequest
1 голос
/ 21 октября 2019

Как описано здесь , при использовании ловушек в библиотеке реагирования вы часто сталкиваетесь с ошибкой реагирования, говорящей 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 после каждого изменения и затем обновив библиотеку в вашем основном приложении. Но, конечно, это не решение, так как во время разработки вы хотите ссылаться на свои библиотеки, а не повторно импортировать их из репозитория

1 Ответ

1 голос
/ 21 октября 2019

Вы можете установить реагировать и реагировать глобально, а затем связать все свои проекты с глобальным экземпляром.

Процедура будет аналогична той, которую вы уже используете, но создаете символические ссылки на глобальный экземпляр. локации:

yarn global add react
yarn global add react-dom

Тогда вы можете ссылаться на них из ваших индивидуальных проектов.

...