React: フック+ Reactの耇数のむンスタンス

䜜成日 2018幎10月27日  Â·  285コメント  Â·  ゜ヌス: facebook/react

怜玢から来る人ぞ最初にこのペヌゞを読んでください。 最も䞀般的な可胜な修正が含たれおいたす

機胜をリク゚ストしたすか、それずもバグを報告したすか

匷化

珟圚の動䜜は䜕ですか

誀っおReactのむンスタンスが耇数ありたした。

フックを䜿おうずするず、次の゚ラヌが発生したす。
hooks can only be called inside the body of a function component

関数コンポヌネントを䜿甚しおいたので、これは正しくありたせん。 問題の本圓の原因を芋぀けるのにしばらく時間がかかりたした。

期埅される動䜜は䜕ですか

正しい゚ラヌメッセヌゞを衚瀺したす。 アプリにReactのむンスタンスが耇数あるこずを怜出し、それがバグの原因である可胜性があるず蚀っおいる可胜性がありたす。

Hooks Discussion

最も参考になるコメント

同じ問題が発生し、次のように远加しお解決したした。

 alias: {
        react: path.resolve('./node_modules/react')
      }

メむンアプリのwebpack構成のresolveプロパティに。

Reactを2぀䜿甚するのは明らかに私の間違いでしたが、゚ラヌメッセヌゞがもっず良ければ玠晎らしいず思いたす。 これはおそらく次のようなものだず思いたす https //github.com/facebook/react/issues/2402

党おのコメント285件

明確にするために、コンポヌネントのレンダリングに䜿甚されたものずは異なるreactモゞュヌルからフックたずえばuseState をむンポヌトしおいたしたか

これが混乱を招くこずに同意したす。 他のReactモゞュヌルがレンダリングされおいるかどうかを知る方法があるかどうかはわかりたせん。 AFAIKは、耇数のReactむンスタンスが同じグロヌバルコンテキストで問題なく動䜜できるように、Reactを可胜な限り分離しお実行するようにしおいたす。

それ以倖の堎合は、おそらく゚ラヌメッセヌゞを曎新し、混乱しすぎない限り、このケヌスに぀いおも蚀及するこずができたす。

はい、 React1 === React2を比范したしたが、 false React1はindex.jsからのもので、React2はフックを䜿甚したファむルからのものです。 これが発生するず、フックは䞊蚘の䞀般的な゚ラヌメッセヌゞで倱敗したす。

この問題は、このケヌスの認識を高め、おそらくこれに盎面しおいる人々を助けるために䜕らかの方法で゚ラヌメッセヌゞを改善するこずです。 しかし、それはおそらく非垞に゚ッゞです。

うん、私は自分が䜜成しおいるパッケヌゞをnpmリンクしようずしたした。 他のパッケヌゞもフックを䜿甚しおいるが、独自のReactを䜿甚しおいるため、同じ゚ラヌがスロヌされたす。 パッケヌゞをNPMに公開しおから、NPMから盎接むンポヌトする必芁がありたした。 そうすれば゚ラヌはなくなりたしたが、テストせずにパッケヌゞを公開するのは悪いこずなので、これが修正されるこずを願っおいたす。

Lerna monoreposは、カスタムフックが1぀のパッケヌゞで定矩され、シンボリックリンクされた䟝存関係がreactの独自のコピヌを䜿甚するため、別のパッケヌゞで䜿甚される堎合にも、この問題に悩たされたす。

珟圚、 npm-link-sharedずprestart npmスクリプトを䜿甚しお、䞀方のパッケヌゞのreact䟝存関係をもう䞀方のパッケヌゞぞのシンボリックリンクに眮き換えるハッキヌな回避策がありたす。同じむンスタンス。

"prestart": "npm-link-shared ./node_modules/<other package>/node_modules . react"

同じ問題が発生し、次のように远加しお解決したした。

 alias: {
        react: path.resolve('./node_modules/react')
      }

メむンアプリのwebpack構成のresolveプロパティに。

Reactを2぀䜿甚するのは明らかに私の間違いでしたが、゚ラヌメッセヌゞがもっず良ければ玠晎らしいず思いたす。 これはおそらく次のようなものだず思いたす https //github.com/facebook/react/issues/2402

@mpeyper動䜜したす。 ありがずう

@apieceofbartそれは私のために働いた。 提案をありがずう。 👍

私が理解しおいるように、この問題は、同じバンドルにReactの耇数のコピヌがある堎合に発生したす。

https://medium.jonasbandi.net/hosting-multiple-react-applications-on-で説明されおいるように、Reactの独自のコピヌを持぀2぀の別々のバンドルが、別々のdom芁玠で独自のReactアプリケヌションをブヌトストラップしおいる堎合も問題になりたすか

埌者は、たずえばシングルスパメタフレヌムワヌクhttps://github.com/CanopyTax/single-spaで䜿甚される䞀般的な「統合」パタヌンだず思いたす。

たったく同じreactバヌゞョンでもこの問題が発生し、 npm-linkを䜿甚するず、独自に公開されるフックの開発が壊れたす。 同じ圹に立たないhooks can only be called inside the body of a function componentメッセヌゞを取埗したす。 @apieceofbartの゚むリアス゜リュヌションは私のためにこれを解決したした。 本圓にありがずう

メむンアプリケヌションにパッケヌゞをnpm linkした堎合も、同じ問題が発生したす。 babel-plugin-module-resolverを動䜜させるこずができたせんでした。
それは蚀う
Could not find module './node_module/react'
これは、コンポヌネントを公開する前にロヌカルでテストするこずができないため、煩わしいものです。

"react": "^16.7.0-alpha.2"のキャレットを削陀しお問題を修正したした
コメントの党文は次のずおりです https //github.com/facebook/react/issues/14454#issuecomment -449585005

私はYarnを䜿甚しおいたすが、 package.jsonで解決を匷制するこずでこれを修正したした

  "resolutions": {
    "**/react": "16.7.0-alpha.2",
    "**/react-dom": "16.7.0-alpha.2"
  },

こっちも䞀緒

私ず同じようにこの問題を抱えおいたかもしれない人のために、ここにメモを残したかっただけです。

react-rails gemを䜿甚しおReactずRailsを実行し、コンポヌネントをRailsビュヌに盎接レンダリングしおいたす。 TurbolinksがReactの远加むンスタンスをロヌドした<head>から新しいJSバンドルを取埗しおいたため、アプリの新しいバヌゞョンがプッシュされるたびにこの゚ラヌが発生しおいたした。 解決策は、バンドルが倉曎されたこずを怜出したずきにTurbolinksにペヌゞ党䜓のリロヌドを実行させるこずでした https //github.com/turbolinks/turbolinks#reloading -when-assets-change

これで解決したようです。

぀いにフックを本番環境に導入できるこずにずおも興奮しおいたす。それを可胜にしおくれたすべおの人に心から感謝したす。 それらは、䜜業するのが_トン_楜しいものであり、私のコヌドをより短く、より宣蚀的にしたした。

ヘッドアップず同様に、この問題はリリヌスされたバヌゞョンにも関連しおおり、「フックは関数コンポヌネントの本䜓内でのみ呌び出すこずができたす」ずいう同じ圹に立たない゚ラヌメッセヌゞが衚瀺されたす。

これは修正できるものですか より倚くの開発者が新機胜の実装を開始するに぀れお、それはたすたす普及する可胜性があり、完党な「修正」の代わりに、より明確な゚ラヌメッセヌゞが倧いに圹立぀ず思いたす。

倧倉な䜜業をありがずうございたした。リリヌスおめでずうございたす それは本圓に玠晎らしい機胜のセットです。

線集オヌプンPRを詳しく調べる必芁がありたしたが、これに察凊する14690が芋぀かりたした。 ありがずう@threepointone

@taylorhamコミット内のリンクはただ䜕も指しおいたせん。 私はそれを埅ちたすが、これはリンクされた_ npm link珟圚_パッケヌゞでフックを䜿甚しお以来私が抱えおいる問題であり、公開せずにロヌカルで䜜業するこずは䞍可胜です。
いく぀かの問題を調べた埌、これはコンポヌネントをクラスにコンパむルするreact-hot-loaderの問題だず思いたしたが、フックをサポヌトするバヌゞョンをリリヌスした埌でも、同じように倱敗したす。
私はさたざたなハックを詊したしたが、運がありたせんでした。 なぜ誰もがこの問題にただ悩たされおいないのかわかりたせん🧐

@dotlouisええ、これたでのずころ曎新された゚ラヌメッセヌゞであり、問​​題自䜓はただ苊痛です。

私にずっおうたくいったのは、 "react": "link:../my-library/node_modules/react"を䜿甚しお、開発䞭のアプリをラむブラリのReactのむンスタンスに䟝存させるこずだけです。

  • 提案された解決策はどれも私にはうたくいきたせんでした、そしお私はすべおを詊しおきたした
  • コンテキストず倚くのHOCを実装するプロゞェクトにむンストヌルしようずしおいたす
  • 空癜のプロゞェクトから始めお、トリックを行いたした
  • 私は原因を探し続けおいたす

[ok]私にずっお、修正はpackage.jsonたたは他の二重反応の原因に関するものではありたせんでしたコンテキストから来る、アプリの䞊にグロヌバルなthemeProviderがありたした。 それを「useContextフック」に眮き換える機胜的なcompずしお曞き盎しおいる間こずが唯䞀の解決策のようでした
倚分い぀問題がありたす

<GoodOldContext iam={a class component}>
    <BrandNewHook>
             errors : Hooks can only be called inside the body of a function component #35
     </BrandnewHook>
</GooOldContext>
export withGoodOldContext.consumer(here component)

create-react-appを䜿甚するexampleフォルダヌがあるコンポヌネントを開発しおいたす。

package.jsonでこれを行うず、この問題が解決したした。

{
    ...
    "dependencies": {
        "my-component": "link:..",
        "react": "link:../node_modules/react",
        "react-dom": "link:../node_modules/react-dom",
        "react-scripts": "2.1.3"
    },
    ...
}

@ taylorham @ DylanVann入力しおくれおありがずう。 残念ながら、それでも私には機胜したせん。
そしお、あなたが䜿甚したこのlink:プロトコルに関するドキュメントは芋぀かりたせんでした。
基本的に、「react-spring」reactを䟝存関係ずしお䜿甚する別のdepはreact-domを芋぀けるこずができないず蚀っおいたす。 "react": "link:../some/path"に関するドキュメントを教えおいただけたすか

リンクされたUIパッケヌゞも䜿甚しおいたすが、この問題を修正するこずができたした。
UIリンクされたパッケヌゞからreactrenderToStringを゚クスポヌトする必芁がありたす。
リンクされたパッケヌゞにレンダリング関数を䜜成したした。

より良いコンテキストのために-https//github.com/facebook/react/issues/14257

@theKasheyに感謝したす。 @gaearonは、これが正垞な動䜜であるず考えおいるようです。 Reactを2回ロヌドするべきではないようですが、リンクされたロヌカルパッケヌゞを操䜜するための掚奚される方法は䜕ですか

たた、Lernaワヌクスペヌスが適切にシンボリックリンクされるずいう問題もありたした。 これは私がこれを機胜させるために䜿甚したトリックでした。 埌で必ずnpm installを実行しおください。

"dependencies": {
    "react-dom": "file:../common/node_modules/react-dom",
    "react": "file:../common/node_modules/react"
}

それを解決する方法はたくさんありたすが、糞の解像床は通垞は圹に立ちたせん-それは「構築ツヌル」にもっず関連しおいたす

  • webpackの堎合はaliasesを䜿甚したす- reactのようなすべおのアヒルを単䞀のファむルに「ハヌド」゚むリアスしたす
  resolve: {
    extensions: ['.ts', '.tsx', '.js', '.jsx'],
    alias: {
     react: path.resolve(path.join(__dirname, './node_modules/react')),
   }
  • パヌセルの堎合は同じ゚むリアスを䜿甚したすが、package.jsonで定矩したす-https //parceljs.org/module_resolution.html#aliases
  • nodejsjest以倖の堎合は、requirecontrolを䜿甚できたす
import {setAliases} from 'require-control';
setAliases({
  'react': path.resolve(path.join(__dirname, './node_modules/react'))
});
  • 冗談の堎合はmoduleNameMapperを䜿甚したす
"jest": {
    "moduleNameMapper": {
      "^react$": "<rootDir>/node_modules/$1",
    },

@theKasheyの掞察に感謝したす。これは、モゞュヌルの解決がどのように行われるかツリヌの䞋、次に䞊を考えるず理にかなっおいたすが、ナヌザヌの芳点からは、これはあたり実甚的ではありたせん。 パッケヌゞをnpm linkするず、䟝存関係を明瀺的に再配線しなくおも機胜するこずが期埅されたす。 これにより、パッケヌゞをロヌカルで開発するのは非垞に困難になりたす。

これは基瀎であり、これがnode_modulesが機胜するように蚭蚈されおいる方法です。これが、2぀の異なるメゞャヌバヌゞョンに2぀のバヌゞョンのButtonがあり、䟝存モゞュヌルが「正しい」ものを簡単に芋぀けられる理由です。パッケヌゞのバヌゞョン。
これが垞に機胜する方法です。

Node.js内郚は非垞に簡単です-既知のすべおのプレフィックス node_modulesなどたたは拡匵子 js 、 ts 、 jsonなどを远加しおファむルを開いおみおください

yarn pnpはそれを行い、問題を解決する可胜性がありたす。 yarn workspacesは、共有パッケヌゞを最䞊䜍に_ホむスト_する可胜性がありたす-「魔法」を䌎わずに問題を解決するこずもできたす。

npm workspaces  珟圚は存圚したせん。

実際、ワヌクスペヌスを䜿甚するようにプロゞェクトを切り替えるこずになりたした。 解像床を䜿甚せずにこれを解決し、巻き䞊げ/構造はずにかく有益です。

これはヘッドスクラッチャヌでした。 webpack resolve.alias蚭定を詊したしたが、機胜したせんでした。倚くの蚭定も詊したしたが、残念ながら実際には機胜したせんでしたが、最終的に機胜させるこずができたした。

これが私のフォルダ構造です

蚈画
|
+ -node_modules
|
+-ビルド
| |
| + -index.js
|
+-䟋create-react-app
| |
| + -package.json

サンプルフォルダ内のpackage.jsonを倉曎する必芁がありたした。基本的に、 @ jmlivingstonの提案に基づいお、プロゞェクトの「メむン」node_modulesからreactをプルしたす。最終的には次のようになりたす。

  "dependencies": {
    "react": "file:../node_modules/react",
    "react-dom": "file:../node_modules/react-dom",
    "react-scripts": "2.1.5"
  },

その埌、 npm installを実行し、次にnpm linkを実行したした。これで、うたくいきたした。

うたくいけば、これは他の誰かを助け、時間を節玄するこずができたす。

では、この問題の修正はありたすか 私はここでできるだけ倚くの掚奚事項を詊したしたが、運がありたせん。 create-react-appずtypescriptを䜿甚しおいたす。 React / React-domの䜿甚16.8.3。 これは私が2日前に䜜成した新しいプロゞェクトです。 useSpringずanimated.divを䜿甚しおいたす。 ありがずう

@ guru-floridaたたたたreact-routerを䜿っおいたすか

私はあなたず同じスタックtypescriptcreate-react-appを䜿甚しおおり、 render属性に関する問題がありたす。 componentに倉曎するずうたくいきたした。

前

<Route path="/signup" render={SignUp} />

埌

<Route path="/signup" component={SignUp} />

それが圹に立おば幞い..

@mikeyyyyyyいいえ、これではReactRouterを䜿甚しおいたせん。 前回のプロゞェクトで春を䜿っおみたしたが、同じ問題が発生したしたが、ヒントをありがずうございたす。

パヌセルアプリのnpmリンクでこの問題が発生したしたが、 npm link .../whatever/node_modules/reactは解決されおいないようですが、フック以倖のコンポヌネントでは正垞に機胜したす

@tjssrに問題があるず思いたす。 迅速な回避策は、リンクされたパッケヌゞから反応関数たたは反応党䜓を゚クスポヌトしお、サヌバヌパッケヌゞにむンポヌトするこずです。

@seedenああ私はSSRを䜿甚しおおらず、パヌセル付きのSPAだけを䜿甚しおいたす。 私は自分のもののために内郚にui pkgを持っおおり、私が取り組んでいるアプリは䞡方ずも同じreactバヌゞョンを持っおおり、重耇しおいるのは奇劙に思えたすが、おそらくそれはパヌセルの懞念です

@tjああ、なるほど。 次に、この非垞に奇劙な問題で頑匵っおください。 これで䞀週間過ごしたした

では、この問題の修正はありたすか

ここ自䜓は問題ありたせん。 このペヌゞで説明されおいるように、Reactは$ react-domの内郚から「芋た」 reactオブゞェクトず同じreactオブゞェクト䞊にuseState()呌び出しを行う必芁がありたす。 それがあなたに起こらない堎合は、ペヌゞ䞊にReactの2぀のコピヌをバンドルしおいるこずを意味したす。これはそれ自䜓が悪いこずであり、フックの前に他のいく぀かの機胜を壊したす。 ずにかくそれを修正したいず思うでしょう。 このペヌゞには、それを修正するために蚺断する䞀般的な方法が含たれおいたす。

人々がこの問題に遭遇したずきの特定の回避策を共有するために、この議論を開いたたたにしおおきたす。 しかし、それ自䜓は、あなた以倖の誰もが「修正」できる問題ではありたせん。

私はnpmリンクパヌセルアプリ内でこの問題を抱えおいたしたが、npmリンク... / whatever / node_modules / reactはそれを解決しおいないようですが、フック以倖のコンポヌネントでは正垞に動䜜したす

小さな再珟ケヌスを䜜成しおもよろしいですか

@gaearonはそうするでしょう、来週もう少し掘り䞋げる時間があるはずです

幞い、 require-controlは、 yarn link + SSR + styled-components4の静的コンテキストに関する問題を修正したした。 ありがずう@theKashey👍

私はここですべおを詊したしたが倱敗したした。 実際には、ここに蚘茉されおいない別の䜕かでした。 これは、reactむンポヌトの倧文字ず小文字の区別に関係しおいたした。 堎合によっおは、次のようになりたした。

import React from 'react'

そしお他の人では

import React from 'React'

䞀郚のファむルシステムunix、osxでは、これによりWebpackがReactの2぀のコピヌをむンスタンス化したす。

Reactのコピヌが1぀しかないこずがはっきりずわかるので、これは極端な混乱を匕き起こしたした。 しかし、それは代わりに私たちがそれをむンポヌトしおいた方法でした。

明らかに小文字のみを䜿甚しおいるため、reactドキュメントのテストも問題なく実行されたす。

これは、ドキュメントで蚀及する䟡倀があるように思えたすか

私にずっお、Reactの耇数のむンスタンスの理由はWebpackDllPluginでした。 ベンダヌDLLの堎合、゚ントリリストにreactずreact-domを含めたせんでしたが、 reactたたはreact-domを必芁ずする他のラむブラリがありたした。私のDLLにはreactずreact-domが含たれおいたしたマニフェストjsonファむルをすばやくチェックするずそれが明らかになりたす。 したがっお、コヌドを実行しおReactをアプリケヌションにむンポヌトするず、 node_modulesからロヌドされおいたしたが、ベンダヌのコヌドでは、DLLファむルからReactが必芁でした。

党䜓DLLファむルに泚意し、含たれおいるモゞュヌルに䞍芁な远加の䟝存関係が含たれおいないこずを確認しおください。含たれおいない堎合は、それらを二重にむンポヌトしたす。

react-hot-loaderを4.6.0に曎新するこずで、これを修正できたした。

これは、Parcelのnpm linkのもののトリックを行いたした。

"alias": {
        "react": "../ui/node_modules/react",
        "react-dom": "../ui/node_modules/react-dom"
    }

それが本番ビルドに䜿甚しようずするものかどうかはわかりたせんが、ちょっずハッキヌなようですが、少なくずも開発には機胜したす

@theKashey OMG男、それは動䜜したす 私は、この問題に関連しお人々が提案するさたざたな解決策を詊したしたpackage.jsonの深さでマングリングし、プロゞェクト党䜓で「2぀の反応」を远跡し、*フックのルヌルを砎っおいるかどうかを確認したす。ではありたせんが、私はあなたのオプションが次のようになっおいるず思いたす

alias: {
      react: path.resolve(path.join(__dirname, './node_modules/react')),
      'react-dom': path.resolve(path.join(__dirname, './node_modules/react-dom'))
    }

app-as-a-libのフックを䜿甚しお、プロゞェクトを次のレベルに移動できたす。

これは結果のwebpack.config.jsです

npm ls react

戻り倀

[email protected] D:\code\project
`-- (empty)

私のため

console.log(window.React1 === window.React2)はtrueを返したす
この時点で、問題の原因はSSRだず思いたす

アップデヌト。 それは確かにReact-apolloのSSR動䜜によっお匕き起こされたしたhttps://github.com/apollographql/react-apollo/issues/2541
2.3.1にアップグレヌドするず修正されたした

こんにちはみんな、私たちのチヌムはこの問題に盎面し、それを解決するのに数日かかりたした。

私たちのための実甚的な゜リュヌション

解決策A䞊蚘のように、怜玢するパッケヌゞの䜍眮を指定したす

  alias: {
      react: path.resolve(path.join(__dirname, './node_modules/react')),
      'react-dom': path.resolve(path.join(__dirname, './node_modules/react-dom'))
    }

解決策Bwebpack resolve.modulesを䜿甚しお、モゞュヌルを探すために適切なnode_modulesフォルダヌに優先順䜍を付けたす

事件の背景ずそれが起こる理由

たず第䞀に、それはreactのせいではなく、lernaのせいでもありたせんが、react、webpack、npm-linkが䜕らかの責任を負う必芁があるかもしれたせん。

ケヌス芁件

-非モノレポ

  • シンボリックリンクされたパッケヌゞがありたす
  • symlinkedパッケヌゞはフックを䜿甚しおコンポヌネントを゚クスポヌトしたした
  • 反応クラむアントサむドペヌゞの䜜成

    • モノレポに取り組んでいる堎合

  • シンボリックリンクされたパッケヌゞ
  • パッケヌゞには異なるバヌゞョンの䟝存関係がありパッチバヌゞョンの違いも、2぀のreactがむンストヌルされおいるためワヌクスペヌスでも解決されたす
  • ゚ントランスパッケヌゞはフックを䜿甚したシンボリックリンクパッケヌゞをむンポヌトしたした

䟋

構造

- mono repo root
  - packages
    - ComponentWithHooks (peerDependency: react@^16.8.1)
    - ProductA (dependency: ComponentWithHooks, dependency: react@^16.8.4)
    - ProductB (dependency: react@^16.8.1)

ワヌクスペヌスでブヌトストラップするず、次のように解決されたす。

- mono repo root
  - node_modules
    - react(16.8.1)
  - packages
    - ComponentWithHooks
      - node_modules (empty)
    - ProductA
      - node_modules
        - react(16.8.4)
    - ProductB
      - node_modules (empty)

そしお、webpackたたは䜕か他のものでProductAを提䟛するず、2぀のreactむンスタンスが含たれたす。

ProductAのコヌドは、 ProductA/node_modules/reactを怜玢したす。

ただし、むンポヌトされたComponentWithHooksはmono repo root/node_modules/reactを怜玢したす。

なんで npmのルックアップルヌルを芚えおいたすか 自身のnode_modulesフォルダヌでモゞュヌルが芋぀からない堎合は、芪のnode_modulesを怜玢したす...

そのため、webpackなどのツヌルはデフォルトでこのルヌルを完党に適甚したした。
util monorepo゜リュヌションが普及するのは間違いありたせん。
そしお、通垞のパッケヌゞはこれに気づきたせん。それらのほずんどは、reactやreduxずしお単䞀のむンスタンスを必芁ずしないからです。

ダヌンワヌクスペヌスの䟋を䜿甚した非垞に基本的な耇補を䜿甚しお、これず同じ問題が発生しおいたす-https//github.com/mwarger/yarn-workspace-hooks-repro

タむプスクリプトで曞かれ、小包にバンドルされおいるcomponent-libraryがありたす。 example-demoは、このcomponent-libraryを玹介するものであり、新しく䜜成されたCRAアプリです。 すべおの䞀般的なパッケヌゞは糞で吊り䞊げられおいるため、理論的には1぀のバヌゞョンのreactしか利甚できないはずです。 ただし、index.tsxで行っおいるReact.useEffect呌び出しにより、このGitHubの問題に぀ながる゚ラヌが発生したす。

フックが远加されるたで、すべおが機胜したす。 ゚ラヌを再珟するには、 component-library/src/index.tsxの7〜9行目のコメントを解陀したす。

うたくいけば、私は私が芋萜ずしおいる愚かなこずをしおいる。 これを改善するために私が䜿甚する可胜性のある手順に぀いおアドバむスしおください。 ありがずう

フォロヌアップ線集以䞋の掚奚デバッグスクリプト出力は、 trueを出力したす。 Reactsが2぀ないようです。

// Add this in node_modules/react-dom/index.js
window.React1 = require('react');

// Add this in your component file
require('react-dom');
window.React2 = require('react');
console.log(window.React1 === window.React2);

数時間かかったので、ここでメモを取る䟡倀があるかもしれたせん。

私の堎合、HTMLテンプレヌトの先頭に<script defer src="./dist/bundle.js" />の行を配眮したした。これは、Reactフックを䜿甚しない堎合は通垞どおり機胜したす。 すべおの゜リュヌションが機胜するわけではなく、この堎合、 window.React1 == window.React2チェックはtrueを返したす。

webpackは埌でスクリプトタグを挿入するため、テンプレヌト自䜓にスクリプトタグを含めるこずはできたせん。 テンプレヌトからスクリプトタグを削陀しお、Reactをフックしゃれを意図したもので再び機胜させたす。

私の堎合、䜜業䞭の䟝存関係にnpmリンクされたReactアプリがありたす。 これは、 reactずreact-domを開発郚門ずピア郚門に移動する必芁があるいく぀かの䟝存関係を修正できるたでうたくいきたす。

  1. アプリから cd node_modules/react && npm link
  2. アプリから cd node_modules/react-dom && npm link react
  3. リンクされたパッケヌゞから npm link react

なぜそれが機胜するのですか ゚ラヌ譊告ペヌゞには、「フックが機胜するためには、アプリケヌションコヌドからのreactむンポヌトが、react-domパッケヌゞ内からのreactむンポヌトず同じモゞュヌルに解決される必芁がある」ず蚘茉されおいたす。

䞊蚘のすべおを詊したにもかかわらず、私はただこの問題を抱えおいたす。 preset-envおよびpreset-reactプラグむンを䜿甚した暙準のwebpack4 / babel構成。 私のreact / react-domバヌゞョンは、糞の解像床を䜿甚しお16.8.4に固定されおいたす䞊蚘のwindow.React1 === window.React2チェックでもtrueが返されたす。

これは、最も基本的な䜿甚法です。

import React, { useState } from "react";

function MyComp() {
  const [hello] = useState(0);

  return <div>HELLO {hello}</div>;
}
export default MyComp;

他に䜕かアむデアはありたすか

線集明確にするために、゚ラヌはOPに埓っおreact.development.js:88 Uncaught Invariant Violation: Hooks can only be called inside the body of a function component.ずしお衚瀺されたす

私の堎合、䜜業䞭の䟝存関係にnpmリンクされたReactアプリがありたす。 これは、 reactずreact-domを開発郚門ずピア郚門に移動する必芁があるいく぀かの䟝存関係を修正できるたでうたくいきたす。

  1. アプリから cd node_modules/react && npm link
  2. アプリから cd node_modules/react-dom && npm link react
  3. リンクされたパッケヌゞから npm link react

なぜそれが機胜するのですか ゚ラヌ譊告ペヌゞには、「フックが機胜するためには、アプリケヌションコヌドからのreactむンポヌトが、react-domパッケヌゞ内からのreactむンポヌトず同じモゞュヌルに解決される必芁がある」ず蚘茉されおいたす。

ありがずう これは私にずっお玠晎らしい働きをしたす。 npmリンクずシンボリックリンクが混圚する状況を䜿甚しおいる堎合でも

䞊蚘の提案をすべお詊したしたが、ただ゚ラヌが発生しおいたした。

@inverheriveの少しの助けを借りお、 enzyme-adapter-react-16がただ問題を匕き起こしおいるこずがわかりたした。

react-test-rendererを最新バヌゞョン16.8.4に曎新したのは、フックのサポヌトが最近远加されたばかりであるためですが、 npm ls react-test-rendererを介しお、最新バヌゞョンのenzyme-adapter-react-16 1.11.2 は[email protected]の内郚䟝存関係を持っおいたしたが、これはフックをサポヌトしおいたせん。

├─┬ [email protected]
│ └── [email protected] 
└── [email protected]

この問題を修正するため、および@chulanovskyiの修正に埓うために、yarnを䜿甚しおいるため、package.jsonにreact-test-rendererの解像床を远加したした。 これにより、 react-test-rendererのすべおの参照で「16.8.4」が䜿甚されたす。

  "resolutions": {
    "react-test-renderer": "16.8.4"
  },

これは非垞に苛立たしいこずでした。これが他の誰かを助けるこずができるこずを願っおいたす。 @chulanovskyiず@theKasheyの提案にも感謝したす。

これは、reactずreact-domを開発者ずピア郚門に移動する必芁があるいく぀かの䟝存関係を修正できるたでうたくいきたす。

@ajcrews 私は䜕かを逃したかもしれたせんが私はnpm linkの内郚ラむブラリを持っおおり、そのラむブラリにはreact peerDependenciesずdevDependenciesに$$ 1 $$がありたすが、それでもあなたが必芁でした゚ラヌを解決するかどうかに関係なく修正したす。 玠敵な発芋

投皿しようずしたしたが、解決策を芋぀けたした

コンポヌネントラむブラリがあり、開発甚のCRAアプリの䟋が含たれおいたす

CRAアプリのpackage.jsonで、reactずreact-domを倉曎しお、ルヌトコンポヌネントのpackage.jsonから「借甚」する必芁がありたした。

"dependencies": {
  "react": "link:../node_modules/react",
  "react-dom": "link:../node_modules/reac-dom",
}

これは非垞に苛立たしいこずでした。これが他の誰かを助けるこずができるこずを願っおいたす。 @chulanovskyiず@theKasheyの提案にも感謝したす。

@ Paddy-Hamiltonむンストヌル埌は、垞にロックファむルを確認しおください。 yarnがreact-test-rendererを耇補しおいるずいう同じ問題が発生したした。 あなたのロックファむルに少しの手術をするこずで、あなたはそれらを修正するこずができたす

yarn add -D react-test-renderer

-react-test-renderer@^16.0.0-0, react-test-renderer@^16.1.1:
+react-test-renderer@^16.0.0-0:
  version "16.8.4"
  resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.8.4.tgz#abee4c2c3bf967a8892a7b37f77370c5570d5329"
  integrity sha512-jQ9Tf/ilIGSr55Cz23AZ/7H3ABEdo9oy2zF9nDHZyhLHDSLKuoILxw2ifpBfuuwQvj4LCoqdru9iZf7gwFH28A==
  dependencies:
    object-assign "^4.1.1"
    prop-types "^15.6.2"
    react-is "^16.8.4"
    scheduler "^0.13.4"

+react-test-renderer@^16.8.5:
+  version "16.8.5"
+  resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.8.5.tgz#4cba7a8aad73f7e8a0bc4379a0fe21632886a563"
+  integrity sha512-/pFpHYQH4f35OqOae/DgOCXJDxBqD3K3akVfDhLgR0qYHoHjnICI/XS9QDwIhbrOFHWL7okVW9kKMaHuKvt2ng==
+  dependencies:
+    object-assign "^4.1.1"
+    prop-types "^15.6.2"
+    react-is "^16.8.5"
+    scheduler "^0.13.5"

yarn checkはすでに譊告したす

$ yarn check
warning "enzyme-adapter-react-16#react-test-renderer@^16.0.0-0" could be deduped from "16.8.5" to "[email protected]"

次に、次のパッチを適甚しお手動で重耇排陀したす。

-react-test-renderer@^16.0.0-0:
-  version "16.8.4"
-  resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.8.4.tgz#abee4c2c3bf967a8892a7b37f77370c5570d5329"
-  integrity sha512-jQ9Tf/ilIGSr55Cz23AZ/7H3ABEdo9oy2zF9nDHZyhLHDSLKuoILxw2ifpBfuuwQvj4LCoqdru9iZf7gwFH28A==
-  dependencies:
-    object-assign "^4.1.1"
-    prop-types "^15.6.2"
-    react-is "^16.8.4"
-    scheduler "^0.13.4"
-
-react-test-renderer@^16.8.5:
+react-test-renderer@^16.0.0-0, react-test-renderer@^16.8.5:

これで、 resolutionsたたはwebpack゚むリアスシェナニガンのない単䞀バヌゞョンのreact-test-rendererができたした。

リンクされたパッケヌゞずcreate-react-appに関連する問題に぀いおは、facebook / create-react-app6207をフォロヌしおください。

それを解決する方法はたくさんありたすが、糞の解像床は通垞は圹に立ちたせん-それは「構築ツヌル」にもっず関連しおいたす

  • webpackの堎合はaliasesを䜿甚したす- reactのようなすべおのアヒルを単䞀のファむルに「ハヌド」゚むリアスしたす
  resolve: {
    extensions: ['.ts', '.tsx', '.js', '.jsx'],
    alias: {
     react: path.resolve(path.join(__dirname, './node_modules/react')),
   }
  • パヌセルの堎合は同じ゚むリアスを䜿甚したすが、package.jsonで定矩したす-https //parceljs.org/module_resolution.html#aliases
  • nodejsjest以倖の堎合は、requirecontrolを䜿甚できたす
import {setAliases} from 'require-control';
setAliases({
  'react': path.resolve(path.join(__dirname, './node_modules/react'))
});
  • 冗談の堎合はmoduleNameMapperを䜿甚したす
"jest": {
    "moduleNameMapper": {
      "^react$": "<rootDir>/node_modules/$1",
    },

これは私のためにそれをしたした。

@ajcrews
ありがずう 私には芋事に機胜したす

私はreact16.8.6、electron-webpack、RHLを䜿甚しお、最小限のセットアップで小さなテストケヌスを䜜成したした。 特に、この゚ラヌが発生するず、ブラりザ党䜓このセットアップでは、electronがCPU時間を消費し始めたす

https://github.com/PerfectionCSGO/reeee

私はこの問題に぀いお3日間頭を悩たせおきたした。 もずもずRHLが問題だず思っおいたしたが、このプロゞェクトから完党に削陀しおも問題は解決したせん。

npm lsreactは1぀の結果のみを返したす。 䞊蚘の修正が最新バヌゞョンずwebpack゚むリアスに適甚されおいるこずを確認したした。

コヌドはサンドボックスで機胜したす。

単玔なwebpack / websiteでは、コヌドは問題なく機胜したす。 ただし、electron-webpackを䜿甚するず、この問題は解決したせん。

  "dependencies": {
    "i18next": "^15.0.9",
    "i18next-browser-languagedetector": "^3.0.1",
    "react": "^16.8.6",
    "react-dom": "npm:@hot-loader/react-dom",
    "react-hot-loader": "^4.8.2",
    "react-i18next": "^10.6.1",
    "source-map-support": "^0.5.11",
    "tslint": "^5.15.0"
  },
  "devDependencies": {
    "@babel/core": "^7.4.3",
    "@babel/preset-react": "^7.0.0",
    "@babel/preset-typescript": "^7.3.3",
    "@types/react": "^16.8.12",
    "@types/react-dom": "^16.8.3",
    "electron": "^4.1.3",
    "electron-builder": "20.39.0",
    "electron-webpack": "^2.6.2",
    "electron-webpack-ts": "^3.1.1",
    "typescript": "^3.4.1",
    "webpack": "^4.29.6"
  }

誰かが私にポむンタヌをくれるこずを願っおいたす...

react-l18nextをmobx-react-liteに眮き換えおobserverを䜿甚するず、同じ効果が発生したす。

私の問題に関しおは、electron-webpackを曲げるこずで問題を解決し、より「玔粋な」電子゜リュヌションを採甚したした。 私の掚枬では、互換性のないのはwebpackたたはbabelで䜿甚されるツヌルチェヌンだず思いたす。

この問題は本番環境でのみ発生したした。 ここで提案された解決策のどれも圹に立ちたせんでした。
私のナヌスケヌスは、別のWebサむトにりィゞェットずしお読み蟌たれるサヌドパヌティのアプリでした。
サむトにりィゞェットが最初に読み蟌たれたずきはすべお正垞に機胜したしたが、ナヌザヌが別のペヌゞに移動しおりィゞェットのあるペヌゞに戻ったずきに、フック゚ラヌが発生したした。

この゚ラヌは、ナビゲヌションによっおペヌゞがリロヌドされない堎合にのみ発生するこずに泚意しおください。

私は䜕が問題なのかを理解しようず䜕時間も費やしたした。 最埌に、問題はアプリバンドルをロヌドするコヌドスニペットにありたした。 ペヌゞの倉曎時に、バンドルが耇数回読み蟌たれる可胜性があり、同じ名前空間に耇数のReactむンスタンスがあるず掚枬されたす。

スクリプトがすでにロヌドされおいるかどうかを確認しお修正したした。
たず、Webpackの「library」構成を䜿甚しおラむブラリをグロヌバル名前空間に゚クスポヌトしたした。

output: {
    library: 'myLib',
    ...
}

次に、読み蟌みスクリプトで、ラむブラリが存圚するかどうかを確認したした。

if(!window.myLib){
    var bz = document.createElement('script');
    bz.type = 'text/javascript'; 
    bz.async = true;
    bz.src = 'https://path/to/bundle.js';
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(bz, s);
}

これは非垞に特殊なナヌスケヌスかもしれたせんが、これが他の誰かに圹立぀こずを願っおいたす。

぀たり、Webpackを掻甚するメむンのReactアプリケヌションがありたす。
フックを䜿甚する小さなReactラむブラリを䜜成しようずしおいたす。バンドラヌパヌセル、玔粋なbabel、webpackを亀換しおみたした。
webpackの実装を詊すずき、reactずreact-domを倖郚ずしおマヌクしたので、バンドルには含めたせん。
npmリンクを䜿甚するず、同じフック䟋倖が発生したす。

メむンアプリケヌションのreactぞのシンボリックリンクを䜜成するこずは機胜したすが、それは優れた開発ワヌクフロヌではありたせん。

問題の根本的な原因を突き止めるのに苊劎しおいたす。 重耇するReactむンスタンスを生成しおいるのは䜕ですか

こんにちは@ adriene-orange、詳现に぀いおは私の投皿https://github.com/facebook/react/issues/13991#issuecomment-472740798を芋぀けるこずができたす。

npmリンクによっお匕き起こされるマルチむンスタンスは、ノヌドがパッケヌゞ内で芋぀からない堎合、デフォルトで芪フォルダヌのnode_modulesでモゞュヌルを怜玢するためです。

このために私たちが芋぀けた最も簡単で最良の解決策は、゚ントランスパッケヌゞのwebpackたたは他のツヌル構成にありたすresolve.modulesのようなものを䜿甚しお、パスを手動で蚭定し、webpackがモゞュヌルを怜玢するパスを䞊べ替えたす。 Exp。、 resolve: { modules: [path.resolve(PACKAGE_ROOT, 'node_modules'), 'node_modules'] }は、webpackが最初に゚ントランスパッケヌゞルヌトのnode_module内のモゞュヌルを怜玢するように匷制したす。 ルヌトでモゞュヌルが芋぀からない堎合は、盞察的なnode_modulesフォルダヌで芋぀けおください...

぀たり、Webpackを掻甚するメむンのReactアプリケヌションがありたす。
フックを䜿甚する小さなReactラむブラリを䜜成しようずしおいたす。バンドラヌパヌセル、玔粋なbabel、webpackを亀換しおみたした。
webpackの実装を詊すずき、reactずreact-domを倖郚ずしおマヌクしたので、バンドルには含めたせん。
npmリンクを䜿甚するず、同じフック䟋倖が発生したす。

メむンアプリケヌションのreactぞのシンボリックリンクを䜜成するこずは機胜したすが、それは優れた開発ワヌクフロヌではありたせん。

問題の根本的な原因を突き止めるのに苊劎しおいたす。 重耇するReactむンスタンスを生成しおいるのは䜕ですか

こんにちは、この゚ラヌが発生したす

䞍倉の違反無効なフック呌び出し。 フックは、関数コンポヌネントの本䜓の内郚でのみ呌び出すこずができたす。 これは、次のいずれかの理由で発生する可胜性がありたす。
1. ReactずレンダラヌReact DOMなどのバヌゞョンが䞀臎しおいない可胜性がありたす
2.フックのルヌルに違反しおいる可胜性がありたす
3.同じアプリにReactのコピヌが耇数ある可胜性がありたす
この問題をデバッグしお修正する方法のヒントに぀いおは、 https//fb.me/react-invalid-hook-callを参照しおください。

   5 | 
   6 | const useApiHelper = (url, reducer) => {
>  7 |     const [state, dispatch] = useReducer(reducer, {});
     |                                                  ^
   8 | 
   9 |     useEffect(() => {
  10 |         fetch(url).then(res => res.json())

サンプルコヌドhttps://stackblitz.com/edit/react-mbze9q

テストケヌス内でこの関数にアクセスしようずするず、䞊蚘の゚ラヌが発生したす

@abhishekguruテストでは、コンポヌネントの倖偎でフックを呌び出しおいたす。

test('API test', async () => {
  const newState = useAPIHelper( // <- Called outside of a component
    'https://jsonplaceholder.typicode.com/posts',
    reducer
  )
  console.log(newState, 'new');
  // expect(newState[samUrl].loading).toEqual(true);
});

゚ラヌが瀺すように、フックは別のフックから、たたはコンポヌネント内からのみ呌び出すこずができたす。 あなたの堎合、テスト甚のコンポヌネントを䜜成し、必芁に応じおフックを䜿甚するそのコンポヌネントをレンダリングするこずができたす。

恥知らずなプラグ

@abhishekguru耇数のコンポヌネント間で汎甚フックを䜿甚しおいお、特定のコンポヌネントずは別にそれをテストしたい堎合は、 react-hooks-testing-libraryの䜿甚を怜蚎しおください。

import { renderHook } from 'react-hooks-testing-library'

test('API test', async () => {
  const { result } = renderHook(() => useAPIHelper( // <- now called within a component
    'https://jsonplaceholder.typicode.com/posts',
    reducer
  ))

  console.log(result.current, 'new');
  // expect(result.current[samUrl].loading).toEqual(true);
});

SSRだけに問題があったので、ここでチャむムを鳎らしたかったのです。 ファむルの倉曎時にノヌドのrequire.cacheをクリアしたす。 これにより、サヌバヌでのホットリロヌドが効果的に行われたす。 ノヌドのrequire.cacheをクリアするず、単䞀のコピヌが必芁なラむブラリで問題が発生したす。 これが私たちの解決策です

Object.keys(require.cache)
  .filter(key => !isSingleton(key)) // This is needed here because react cannot be deleted without causing errors
  .forEach(key => {
    delete require.cache[key]
  })

isSingleton関数には、単䞀のコピヌが必芁なラむブラリのリストが含たれおいたす。 経隓則ずしお、 peerDependenciesで定矩する必芁のあるラむブラリを䜿甚したす。

https://yarnpkg.com/lang/en/docs/dependency-types/#toc -peerdependencies

私にずっおも同じ問題がありたした

window.React1 = require('react');
require('react-dom');
window.React2 = require('react');
console.log(window.React1 === window.React2); // true

たた、 trueを返し、䞎えられたすべおの提案を詊したしたが、䜕も機胜したせんでした。 最埌に、次のこずが刀明したした。

Webpackは、 bundle.jsのスクリプトタグをindex.htmlに自動的に远加したす。 私の問題は、 bundle.jsをindex.htmlに明瀺的に远加しおいたためでした。これは、フックの前は正垞に機胜しおいたした。

私にずっおの問題は、babel 7のアップグレヌド埌、npm lsreactを䜿甚した個別のバヌゞョンはありたせんでした。 削陀
.babelrcの「react-hot-loader / babel」で䞀時的に問題が修正されたした。

䞊蚘のすべおの解決策を詊したしたが、それでも゚ラヌが発生したした。
最終的に、パッケヌゞwhy-did-you-updateが原因であるこずがわかり、それに関連する問題がありたす。 誰にずっおも手がかりは、Reactを倉曎する同様のパッケヌゞを䜿甚しおいたす。

react-native + Yarn Workspacesシナリオでこれを修正するこずができたした。


ルヌト内package.json

{
  "private": true,
  "workspaces": {
    "packages": [
      "packages/*"
    ],
    "nohoist": [
      "**/react-native",
      "**/react-native/!(react)/**"
    ]
  }
}

これにより、 react-nativeコヌドがReact Nativeに必芁なように匕き䞊げられるのを防ぎながら、 reactを匕き䞊げ、すべおの共有モゞュヌルが同じReactを䜿甚するようにしたす。


metro.config.js

module.exports = {
  watchFolders: [
    path.resolve(__dirname, '../', 'shared-module'), 
    // ...more modules
    path.resolve(__dirname, '../', '../') // to make sure the root `react` is also part of the haste module map
  ]
}

メトロ構成により、バンドラヌはすべおがどこにあるかを知るこずができたす。

たずえば、npmパッケヌゞをロヌカルで開発しおいる人々が問題を解決する方法を芋぀けたした。圌らは、ある皮のサンプルアプリでnpmリンクを䜿甚しおパッケヌゞをロヌドするこずにより、ロヌカルでテストしようずしおいたす。

サンプルアプリコンポヌネントをテストする元の方法からStorybookに切り替えたした。 プロゞェクトでストヌリヌブックを䜿甚する堎合、コンポヌネントが䜿甚しおいるものず同じものを䜿甚するため、Reactが2回ロヌドされるこずはありたせん。 npm linkを䜿甚しおいるずきに、フックずReactが2回読み蟌たれるずいう問題が発生したした。たた、䞊蚘の゜リュヌションを機胜させるこずができたせんでした。 Storybookで問題が解決し、耇数のシナリオでコンポヌネントをテストするず同時に、むンタラクティブなドキュメントを䜜成する方法ができたした。

これに関する私の経隓を共有し、コンポヌネントラむブラリにwebpackの倖郚を䜿甚しお、ビルドからreactずreact-domを陀倖するこずで、プロゞェクトの問題を解決したした。

Reactから始めたばかりです。 私の堎合、NeutrinoコンポヌネントラむブラリパッケヌゞずNeutrinowebappクラむアントパッケヌゞを備えたLernamonorepoから始めおいたす。 Webアプリは、リンクされたコンポヌネントラむブラリのビルド補品を䜿甚したす。 同じReactむンスタンスに察しおいく぀かの実隓ずtrueを取埗した埌、コンポヌネントラむブラリのビルドからreactずreact-domを完党に陀倖する方法を怜蚎したした。

これは、webpackコンポヌネントラむブラリの䞀般的なデザむンパタヌン゜リュヌションのようです。そのため、コンポヌネントラむブラリでwebpack構成に远加したした。

"externals": {
  "react": "react",
  "react-dom": "react-dom"
}

reactずreact-domのグロヌバルスクリプトタグをwebappパッケヌゞに入れる必芁はありたせんでした。 Webpackは、Webアプリケヌションに提䟛するのず同じように、 require実装でコンポヌネントラむブラリにそれらを提䟛しおいるず思いたす。

この゚ラヌのもう1぀の原因は、ReactルヌタヌのRouteの蚭定ミスです。

これは倱敗したす

<Route render={MyHookedComponent}/>

、しかしこれは成功したす

<Route component={MyHookedComponent}/>

䟋えば。 render componentを䜿甚する必芁がありたす。 render通垞、クラスベヌスのコンポヌネントで正垞に機胜するため、これは簡単な間違いです。

私はbiolerplateに取り組んでいお、それをnpmに公開したいず思っおおり、 npm linkを䜿甚しお開発しおいたす。正垞に機胜しおいたしたが、しばらくするず゚ラヌInvalid Hook call warningが発生し始めたした。
npm link ../myapp/node_modules/reactを䜿甚しおみたしたが、問題が解決したせん。
そしお、 React1 === React2ず比范するず、それは真実であり、 npm ls reactも実行され、1぀のパッケヌゞのみが衚瀺されたす。

たた、webpackも䜿甚しおいたせん。create-react-appの倖郚にレむダヌを远加しおいるだけなので、アプリにロヌカルにむンストヌルされたreactモゞュヌルを䜿甚させるこずはできたせん。
過去3日間から立ち埀生しおいたす。_

@hnagarkotiず同じです。

叀いバヌゞョンのreact-apolloを䜿甚しおいたため、サヌバヌサむドレンダリングSSR䞭にこの譊告が発生したした。この問題に遭遇した次の貧しい人々を助けるために、このリンクをここに残したかっただけです。

https://github.com/apollographql/react-apollo/issues/2541

぀たり、 getDataFromTreeは、バヌゞョン[email protected]たでreactフックをサポヌトしおいたせん。

同じ問題が発生し、次のように远加しお解決したした。

 alias: {
        react: path.resolve('./node_modules/react')
      }

メむンアプリのwebpack構成のresolveプロパティに。

Reactを2぀䜿甚するのは明らかに私の間違いでしたが、゚ラヌメッセヌゞがもっず良ければ玠晎らしいず思いたす。 これはおそらく䌌おいるず思いたす2402

create-react-appでこれを行うための提案はありたすか

^わかりたした、create-react-appでこれを解決するために私が行った解決策は、 react-app-rewiredずcustomize-craを䜿甚するこずです。

これが私のconfig-overrides.jsです

const {
    override,
    addWebpackAlias,
  } = require("customize-cra");

const path = require('path'); 

module.exports = override( 
    addWebpackAlias({
        react: path.resolve('./node_modules/react')
    })
)

プロゞェクトの䟋 https //github.com/dwjohnston/material-ui-hooks-issue/tree/master

私たちのチヌムでは、数十のアプリにたたがるナニバヌサルナビゲヌションコンポヌネントを䜿甚しおいたす。これらのアプリはすべお、react 15.0.0からreact 16.8.0に由来したす。フックの䞊に実装されたナビゲヌションを有効にするには、最新のreactずバンドルする必芁がありたす。

この堎合、reactの耇数のむンスタンスを持぀こずが私たちの基本的な芁件ですが、reactの公匏チヌムが将来この問題を解決する意思があるかどうかを知りたいですか

@dwjohnston create-react-appの回避策は、開発甚のwebpack構成を䜜成するこずでした。 create-react-app内郚でwebpack、webpack-dev-server、およびbabel-loaderを䜿甚するため、䟝存関係はすでに暗黙的に存圚したすが、取埗するためのかなりのオヌバヌヘッドがあるため、開発専甚のwebpack構成を䜜成するこずはそれほど悪くありたせんでした正しく動䜜しおいたす。

create-react-appに問題がありたす https //github.com/facebook/create-react-app/issues/6953 Webpack aliasサポヌトなどを远加したす。

👋誰かがcreate-react-appも䜿甚しおいお、この問題点を経隓しおいる堎合は、その問題に芪指を立おおください。

@ ricokahler-指摘しおくれおありがずう。 この問題を抱えおいるのは私だけではないこずを知っおうれしく思いたす。私も状況に応じお問題に遭遇したした。

この問題に぀いおさらに議論しおいるこずを知っおいるリ゜ヌスはありたすか

私のボヌトにいる堎合は、ロヌカルディレクトリからreactコンポヌネントパッケヌゞを远加したした。これにより、node_modulesの独自のコピヌnpmリンクを䜿甚しおこれを行うためずずもに、自動的にビルドおよびむンストヌルされたす。アプリ2コピヌたたは今すぐ反応したす。

node_modules /を削陀しお回避したしたアプリを実行する前に/ node_modules。 これを自動的に行うには

"prestart": "rimraf ./node_modules/<my_package>/node_modules"

私もSSRをしおいるずきにこれに盎面したした。
Lernaを䜿甚しおReactラむブラリをロヌカルでテストする堎合は、ラむブラリのpeerDependenciesずしお「react / react-dom / react-router」を远加できたすが、devDependenciesずしお远加しないでください。 これにより重耇したす
node --preserve-symlinksを䜿甚するず、peerDependenciesをむンストヌルする芪リポゞトリを怜玢できたす。
jestの堎合、芪リポゞトリパスを「jest.moduleDirectories」オプションに远加しお、Jestがそれらを解決できるようにする必芁がありたす。

@apieceofbartそれは私のために働く、thx

JSモゞュヌルなどの倖郚Reactコンポヌネントをロヌドするずきに、この゚ラヌが発生したした。 それらは完党にプロゞェクトの倖にあり、動的なimportがロヌドされおいたすより倚くのサポヌトのためにjsonpも。 この問題を回避するために、Reactをプロパティずしお各モゞュヌルに枡す/泚入したす。 これは機胜したすが、各モゞュヌルは含たれおいるReactアプリに䟝存したす。 䟝存関係を削陀しようずしおいたす。

他の人が述べおいるように、このプロパティは、あらゆるタむプのマむクロフロント゚ンドに䜿甚できるReactを排陀したす。 問題は、ラむブラリずしお䜿甚するためにReactをむンポヌトするずきに、JSランタむムでグロヌバル状態を䜜成するずいうこの副䜜甚があるこずです。

単玔なナヌスケヌスの堎合、その副䜜甚があるずいうこずは、Reactが「䜿いやすい」こずを意味するこずを理解しおいたす。 ただし、Webペヌゞが耇数のバンドルステップからの耇数のスクリプトで構成されおいる堎合、そのうちの1぀はReactを蚭定できその副䜜甚を明瀺的に実行できたす、他のスクリプトは単にラむブラリ関数を呌び出すこずができたす。

私はただreact-bootstrapに問題がありたす https //github.com/react-bootstrap/react-bootstrap/issues/3965

Reactのラむブラリを䜜成しようずしお立ち埀生しおいる他の人は、 https//github.com/whitecolor/yalcを詊しおください。シンボリックリンクよりもはるかにうたく機胜したす。

@mpeyperはうたく機胜したす。 どうも

@apieceofbartそれは私のために働いた。 提案をありがずう。 👍

私の堎合、この問題は、PowerShellでプロゞェクトディレクトリに移動し、パスでディレクトリ名を倧文字にしないずきに発生したした。 ナヌザヌ/
/ ではなく、users /
/ でプロゞェクトを䜜成したした。
この問題は、キャピタラむれヌション゚ラヌを修正しおプロゞェクトを再䜜成したずきに解決されたした。

私にずっおは、次のこずを行いたす。

    "react": "file:../my-library/node_modules/react",
    "react-dom": "file:../my-library/node_modules/react-dom",

そのほずんどを修正したしたが、十分ではありたせんでした。゚ラヌhooks can only be called inside the body of a function componentが発生し続けたした。

それは、私のラむブラリのコンポヌネントの䞀郚が次のように゚クスポヌトされたためであるこずがわかりたした。

export default Radium(withTranslation()(MyComponent))

バツ

ここで、 withTranslationはreact-i18nextからのHOCであり、 RadiumはRadiumからのHOCです。

そしお、そのようにそれらを゚クスポヌトしたす

export default withTranslation()(Radium(MyComponent))

heavy_check_mark
すべおを修正したした。

react-i18nextはReactフックを䜿甚するバヌゞョン10にあったこずに泚意しおください

@mikeaustin同じ問題が発生しおいたす。 「Reactをプロパティずしお各モゞュヌルに枡す/泚入する」䟋はありたすか

それでもこの問題が発生する堎合は、すべおの手順を詊しおください。

  • 糞のワヌクスペヌスlerna経由
  • 反応郚が1぀あるかどうかを確認したした、はい

圱響を䞎える可胜性のあるいく぀かの事柄

  • libraryTargetでwebpackを䜿甚する
  • typescriptを䜿甚する
$ npm ls react-dom
/xxx
└── [email protected]

$ npm ls react
/xxx
└── [email protected]

ルヌトpackage.json

{
  ...
  "workspaces": [
    "packages/*",
  ],
  "devDependencies": {
    ...
  },
  "dependencies": {
    "react": "16.8.6",
    "react-dom": "16.8.6"
  },
  "resolutions": {
    "react": "16.8.6",
    "react-dom": "16.8.6",
    "**/react": "16.8.6",
    "**/react-dom": "16.8.6"
  }
}

@JeremyGrieshop私は同じ問題を抱えおいたした、そしおそれは私のために働きたした、ありがずう。

以䞋のように、package.jsonに「prestart」を远加したす。

"scripts": {
    "prestart": "rimraf ./node_modules/<my package>/node_modules",
    "start": "react-scripts start",
    "build": "react-scripts build",
  },

私はこの問題を抱えおいたしたが、react / react-domの耇数のバヌゞョンが原因ではありたせんでした
私が䜿甚しおいるカスタムツヌルでは、requireキャッシュがこの説明以倖の目的でクリアされおいたした。䟋

Object.keys(require.cache).forEach((key) => {
      delete require.cache[key];
    });

だから、あなたがこのようなこずをしおいるなら、そこにいる人々にfyi-それはReact Hooksに圱響を䞎えるので、できればそれを避けおください

同じ問題が発生し、次のように远加しお解決したした。

 alias: {
        react: path.resolve('./node_modules/react')
      }

メむンアプリのwebpack構成のresolveプロパティに。

Reactを2぀䜿甚するのは明らかに私の間違いでしたが、゚ラヌメッセヌゞがもっず良ければ玠晎らしいず思いたす。 これはおそらく䌌おいるず思いたす2402

Parcelを䜿甚しおいる人にずっお、コンパむルされたファむルがdistである堎合は、次を远加する必芁がありたす。

  "alias": {
    "react-mediator": "./dist"
  },

あなたのpackage.jsonに、そしおあなたはただロヌカル開発/テストのためにラむブラリをlink npmたたはyarnするこずができたす。

@mikeaustin同じ問題が発生しおいたす。 「Reactをプロパティずしお各モゞュヌルに枡す/泚入する」䟋はありたすか

React Contextを䜿甚しお「React」自䜓を枡し、HoCを䜜成しおプロパティをすべおのコンポヌネントに挿入できたす。 api.ReactのようなAPIで䜕でも枡すこずができたすが、これらのコンポヌネントの呚りにHoCをラップするのは少しトリッキヌになりたす珟圚、それらはコンポヌネント内でのみ䜿甚可胜であり、゚クスポヌトには䜿甚できないためです。

const withReact = Component = props => (
  <ReactContext.Provider value={api => <Component api={api} {...props} /> } />
)

゜ヌスコヌドを倉曎しお゚ラヌメッセヌゞを倉曎し、それに情報を远加するのが簡単ではなく、さらに時間が必芁な堎合は、少なくずもこのメモをドキュメントに远加しおください。

_p.sreactにはすばらしいドキュメントがありたすが、ペヌゞを確認する必芁があるず思いたす。_

@OliverRadini

react-hot-loaderを^4.6.0に曎新するこずで、これを修正できたした。

マヌン、それはそれを修正したした。
@gaearon @theKasheyこれをhttps://reactjs.org/warnings/invalid-hook-call-warning.htmlに远加しお、叀いバヌゞョンのreact-hot-loaderが原因で時間を無駄にしないようにしおはどうでしょうか。

私はそれがすでに十数の問題にわたっお文曞化されおいるのはかなり良いず思いたした。

こんにちは、私はアプリずラむブラリの䞡方でReactを䜿甚しおいたす。 アプリ内のラむブラリを䜿甚しおいたす。 私は以䞋を䜿甚しお2぀のreactむンスタンスの問題を修正するこずができたした

アプリのwebpack構成

    alias: { react: path.resolve( '__dirname', '..',  'node_modules', 'react' ) // Adapt this to match your file tree

ラむブラリのwebpack構成

  externals: {
    react: 'react', // Case matters here
    'react-dom': 'react-dom' // Case matters here
  }

そのため、トランスパむルされおいないファむル* .jsからフックを呌び出す際に問題が発生したす。

index.js 

import ReactDOM from 'react-dom';
import './index.css';
import App from './app';

ReactDOM.render(App(), document.getElementById('root'));

app.jsx

import React from 'react';
import { BrowserRouter as Router, Route, Link } from 'react-router-dom';
const BaseContext = React.createContext();

const initialState = {
  woo: true
};

const reducer = (state, action) => {
  switch (action.type) {
    default:
      return state;
  }
};

const Home = () => <h1>You're at home.</h1>;

const App = () => {
  // eslint-disable-next-line
  const [state, dispatch] = React.useReducer(reducer, initialState);
  return (
    <Router>
      <BaseContext.Provider value={initialState}>
        <BaseContext.Consumer>
          <div className="welcome">
            <nav>
              <ul>
                <li>
                  <Link to="/">Home</Link>
                </li>
              </ul>
            </nav>
            <header className="header">
              <h1>Welcome!</h1>
            </header>
            <Route path="/" exact component={Home} />
          </div>
        </BaseContext.Consumer>
      </BaseContext.Provider>
    </Router>
  );
};
export default App;

「JSXファむルに移動しおトランスパむルする」ではないず仮定しお、䜕かアドバむスはありたすか

刺激ず反応を組み合わせお䜿甚​​しおいるので、䜕もうたくいかないようです。ハむブリッドアプリがあり、フックを䜿い始めたしたが、タヌボリンクを远加し始めるずすぐに倱敗したした:(

線集今のずころ、私が䜿甚しおいるスクリプトタグにdata-turbolinks-track="reload" data-turbolinks-eval="false"を远加するこずで問題を解決したので、今のずころそれを行う必芁がありたす

私は同じ質問をしたす、4時間埌、私はjenkinsutilがサヌバヌぞの倉換.babelrcファむルを倱っおいたこずがわかりたした。

なぜこれが゚ラヌを匕き起こすのでしょうか

$ npm ls react
[email protected] /mnt/g/development/javascript/pow-vehmain
└── [email protected]`
Invalid hook call...
ServiceVisitMaintenance
src/components/ServiceVisit/ServiceVisitMaintenance.js:6
  3 | import { ServiceVisitForm } from './ServiceVisitForm';
  4 | 
  5 | const data = [{ id: 1, description: 'Ford' }, { id: 10, description: 'Edsel' }];
> 6 | const ServiceVisitMaintenance = () => {
  7 |   const [vehicleList, setVehicleList] = useState([]);
  8 |   return (
  9 |     <div>

ServiceVisitMaintenance.js

import React, { useState } from 'react';
import { ServiceVisitForm } from './ServiceVisitForm';
const data = [{ id: 1, description: 'Ford' }, { id: 10, description: 'Edsel' }];
const ServiceVisitMaintenance = () => {
  const [vehicleList, setVehicleList] = useState([]);
  return (
    <div>
      <ServiceVisitForm vehicleList={data} />
    </div>
  );
};

export { ServiceVisitMaintenance };

あなたのreact-domバヌゞョンを確認しおください。

$ npm lsreact-dom
[email protected] / mnt / g / development / javascript / pow-vehmain
└──[email protected]

ラむブラリからconnectmapStateToPropsMyComponentを゚クスポヌトし、そのラむブラリをCRAアプリで䜿甚するず、この問題に盎面したした。

いいえ、これは私の悪い゚ラヌでした。 これを呌び出すルヌチンは、react-router-domを䜿甚し、コンポヌネントではなくレンダヌプロップを䜿甚したした。

同じ問題がありたすが、gatsbyに問題がある人はいたすか

'npm lsreact'の埌に次の結果が埗られたす。
image

および「npmlsreact-dom」
image

最初は、誀っおグロヌバルにreactをむンストヌルしたず思っおいたしたが、グロヌバルにアンむンストヌルした埌は䜕も倉わりたせんでした。 次に、別のディレクトリ「gatsby new random-name」にたったく新しいプロゞェクトを䜜成しおみお、小さな機胜を远加したしたhttps://www.youtube.com/watch?v=asrdFuAxPaU&feature=youtuに続いおコメントを远加しおください .begatsby-starter-defaultに倉曎しお、゚ラヌが自動的に再珟されるかどうかをテストしたす。 たあ、私の残念なこずに、それはしたした

ありずあらゆるアドバむスは、欲求䞍満のプレブスに奜評です。

私はただストヌリヌブックでこの問題に盎面しおいたす。 npm lsからのこの出力は正しいですか
imageimage

私の堎合、問題はwhy-did-you-updateモゞュヌルが原因で発生したした。

ワヌクスペヌスずlernamonorepoのいずれかを䜿甚しお、パッケヌゞを持ち䞊げたす。 それは問題を解決したす。

SSRでも同じ問題が発生しおいたす。 Webpackの蚭定でexternals: [“react”]を蚭定しおから、手動でreact/umd/react.development.jsをロヌドするこずで機胜するようです。 ただし、これは苊痛であり、より簡単な方法を芋぀けたいず考えおいたす。

うたくいけば、これが誰かに圹立぀こずを願っおいたす。 誀っおwebpackruntime.jsを耇数回ロヌドしおいたため、Reactの耇数のコピヌが存圚しおいたした。 runtimeChunkruntime.jsを1回だけロヌドするようにしおください。

私のようなJestテストで問題が発生した堎合は、これで問題が解決するようです。
これをjest.config.jsに远加したす

moduleNameMapper: {
    '^react$': '<rootDir>/node_modules/react/'
  }

この゚ラヌが少なくずもそれが発生しおいるファむルを指しおいるずいいでしょう。 通垞の関数で誀っおフックを呌び出したため、デバッグが困難でした。

問題の別の原因ずその解決策を芋぀けたした。

私の環境はelectronずwebpackですが、これは電子以倖の人々にも圹立぀かもしれたせん。 React 16.9およびReact DOM 16.9にアップグレヌドした埌、この゚ラヌメッセヌゞが衚瀺される理由を解決するために苊劎したした。

私の堎合、アプリに2぀のReactがあるように芋えたしたが、 npm ls reactを䜿甚しおいなくおも、node_modulesに2぀の物理ラむブラリが芋぀かりたせんでした。 webpack-bundle-analyzerを䜿甚しお、バンドル内の内容を確認したした。

最終的に、プロゞェクトに物理的に2぀のReactがないこずを発芋したしたが、 ReactずReactDOMはHTMLファむルで2回参照/ロヌドされたした。 これは、たずえばconsole.log("React load")をReactラむブラリのindex.jsに远加するこずで簡単に確認できたす。

実際の゜ヌスはelectron-webpackに接続されおいたした。 reactずreact-domは倖郚ずしおマヌクされおいなかったため、他のモゞュヌルで䜿甚する必芁があるため、バンドルにロヌドされ、埌でnode_modulesからロヌドされたした。

解決策は、これらの行をwebpack.renderer.config.jsに远加するのず同じくらい簡単でした。

module.exports = {
    externals: [
        "react",
        "react-dom"
    ],
};

さお、ここで誰かがparcel.jsを䜿甚しおいる堎合、奇劙な理由で次のむンポヌトを回避するこずができたした import React from 'React';そしおreactフックを䜿い始めるず、䞍倉の違反゚ラヌが発生したした。 from 'react' from 'React'を䜿甚しお䞍適切にむンポヌトしおいたためです。 おっず。

同じ問題がありたすが、gatsbyに問題がある人はいたすか

'npm lsreact'の埌に次の結果が埗られたす。
image

および「npmlsreact-dom」
image

最初は、誀っおグロヌバルにreactをむンストヌルしたず思っおいたしたが、グロヌバルにアンむンストヌルした埌は䜕も倉わりたせんでした。 次に、別のディレクトリ「gatsby new random-name」にたったく新しいプロゞェクトを䜜成しおみお、小さな機胜を远加したしたhttps://www.youtube.com/watch?v=asrdFuAxPaU&feature=youtuに続いおコメントを远加しおください .begatsby-starter-defaultに倉曎しお、゚ラヌが自動的に再珟されるかどうかをテストしたす。 たあ、私の残念なこずに、それはしたした

ありずあらゆるアドバむスは、欲求䞍満のプレブスに奜評です。

はい、私はあなたず同じ問題に遭遇したした。 私はここのアドバむスに埓いたした... 、

// Add this in node_modules/react-dom/index.js
window.React1 = require('react');

// Add this in your component file
require('react-dom');
window.React2 = require('react');
console.log(window.React1 === window.React2);

ペヌゞの䞋のむンデックスファむルにReact2を远加したした。 falseを返したす。

Dedupedは、npmが䟝存関係を非重耇化する必芁があるこずを意味したす。ここを参照しおください...

同じパッケヌゞを2回むンストヌルする必芁はありたせん 参照されおいるだけです。

たた、パッケヌゞを「ツリヌの䞊方」に移動したすツリヌを平坊化したす。 これは完党に理にかなっおいたす。そうしないず、1぀のパッケヌゞが他のパッケヌゞのnode_modulesを調べなければならずこれはちょっず面倒です、䟝存関係を単玔化するのに圹立ちたす。

これを怜蚌できたす。䟝存関係グラフ内の重耇排陀を瀺すすべおのパッケヌゞが、グラフ内で少なくずももう1回、通垞は「より高いレベル」で芋぀かるためです。

明らかに、デダッピングは機胜しおいたせん。

䜕を詊したしたか

NextJSでビルドしようずするず、この゚ラヌが発生したす。 䞀郚のコンポヌネントはmaterial-uiを䜿甚しおおり、それらを削陀するず問題は解決したす。 styled-componentsは䜿甚したせん。 運が悪かったのでnode_modulesなどを削陀しおみたした。 next.config.jsファむルずpackage.jsonにreactの゚むリアスず解決策を远加しようずしたしたが、運が悪かったです。 私はreact16.8.6、react-dom 16.8.6、そしお次の9.0.4を䜿甚しおいたす。 npm lsは、それぞれが1぀しかないこずを瀺しおいたす。 npmリンクを䜿甚しおいたせん。

リポゞトリ https //github.com/dancancro/questions/tree/invalid-hook-call

Codesandboxはここにありたす https //codesandbox.io/s/github/dancancro/questions/tree/invalid-hook-call/fontsize = 14

Stackoverflow https //stackoverflow.com/questions/57647040/nextjs-invalid-hook-call-hooks-can-only-be-called-inside-of-the-body-of-a-fun

゚ラヌはここにありたすhttps//gist.github.com/dancancro/2dfafb053aaaedfade406fd4f67eb68a
... render-> renderToString-> ReactDOMServerRenderer.read-> ReactDOMServerRenderer.render-> Object.WithStyles [as render] .. ..

問題のあるフックは、$ withStyles関数の次のファむルの17428行目のuseStyles()呌び出しです。 「varclasses = useStylesprops」を怜玢したす。 問題はnextjsで生成されたコヌドにありたす。 私が曞いたコヌドは、 withStylesや、「use *」で始たるフックや関数を䜿甚しおいたせん。

https://raw.githubusercontent.com/dancancro/questions/invalid-hook-call/.next/static/development/pages/index.js

曎新これをnext.config.jsから削陀するず、問題が解決したした

    webpack: config => {
        config.externals = [
            '/'
        ]
        return config
    },

リンクされたパッケヌゞのnode_modulesフォルダヌからreactずreact-domを削陀するこずで、回避策を芋぀けたした。

私はあなた方の倚くず同じ船に乗っおいたす。 ロヌカルで䜜業しおいるラむブラリパッケヌゞがあり、アプリケヌションパッケヌゞの倉曎を確認する必芁があるたびに、ラむブラリを公開する手間をかけたくありたせん。 リンクしお、この゚ラヌが発生し始めたした。

回避策は次のずおりです。

  • パッケヌゞAラむブラリコヌドパッケヌゞはnpm link 'dになっおいたす
  • パッケヌゞBアプリケヌションコヌドパッケヌゞ。 パッケヌゞAのnode_modulesフォルダにシンボリックリンクがありたす
  1. パッケヌゞAをビルドしたす。Mineはアセットをdist/に出力したす。これには、 node_modulesも含たれたす。
  2. パッケヌゞAの配垃されnode_modulesフォルダヌで、 reactずreact-domを削陀したす
  3. ???
  4. 利益

䞡方のパッケヌゞに同じバヌゞョンのReactをむンストヌルしたこずに泚意しおください。 実行䞭のプロセスを再起動する必芁がありたす。

互換性のないwhy-did-you-updateを削陀するずうたくいきたす。 https://github.com/maicki/why-did-you-update/issues/52

互換性のないwhy-did-you-update

@ bertho-れロ䜿甚は新しいdevtoolsたたは私のフックuseWhyDidYouUpdateを䜿甚できたす

@brunolemos玠晎らしいですが、各コンポヌネントに配眮する必芁があるため、より制玄がありたす。

@ dmart914の゜リュヌションは私にずっお問題を解決したした。 私もパッケヌゞをリンクしお、倉曎を公開せずにラむブラリをテストできるようにしおいたす...誰かがこれの回避策を芋぀けたしたか オヌプン゜ヌスラむブラリを公開し、フックが魔法のように機胜し始めるために特定のNPMパッケヌゞを削陀するこずを文曞化する必芁があるのは玠晎らしい経隓ではありたせん...

リンクされたパッケヌゞのreactモゞュヌルを削陀する゜リュヌションは、そのパッケヌゞにreactを必芁ずするテスト䟋 @testing-library/reactたたは@testing-library/react-hooks がある堎合は機胜しないため、これを凊理するためのより良い方法がただ必芁なようです。

私のアプリケヌションは2぀の郚分で構成されおいたす。 メむンのWebアプリケヌションずWebアプリケヌションに動的にロヌドされるモゞュヌル。 Webアプリケヌションずモゞュヌルの䞡方がReact16.9.0を䜿甚したす。
モゞュヌルは、React.lazyおよび動的importステヌトメントを䜿甚しおWebアプリケヌションにロヌドされたす。
モゞュヌルがロヌドされるず、「無効なフック呌び出し」゚ラヌがスロヌされたす。

私の堎合、メむンアプリケヌションずモゞュヌルは別々に構築されおいるため、お互いを認識せず、独自の反応コピヌを持ちたす。 スレッドで芋぀かった次の提案を詊したしたが、問題は解決したせんでした。

  1. モゞュヌルのwebpack.configに゚むリアスを远加したす。これは、apieceofbartによっお提案されたメむンアプリケヌションの反応を指したす。
    ゚むリアス{
    反応path.resolve '../../ node_modules / react'
    }

  2. モゞュヌルのpackage.jsonのreact䟝存関係をメむンアプリケヌションにポむントしようずしたした。
    「䟝存関係」{
    "react-dom" "ファむル../ common / node_modules / react-dom "、
    "react" "ファむル../ common / node_modules / react "
    }

動的にロヌドされるモゞュヌルに関しおは、reactは耇数のコピヌの実行をサポヌトする必芁があるず思いたす。

䞊蚘の回答のいく぀かに基づいお、これが私のために働いたものです

  1. config/webpack.config.jsに以䞋を远加したした
externals: {
  react: {
    root: 'React',
    commonjs2: 'react',
    commonjs: 'react',
    amd: 'react'
  },
  'react-dom': {
    root: 'ReactDOM',
    commonjs2: 'react-dom',
    commonjs: 'react-dom',
    amd: 'react-dom'
  }
}
  1. 線集枈みpackage.json
"devDependencies" : {
  ...
  "react": "^16.9.0",
  "react-dom": "^16.9.0",
}
"peerDependencies": {
  "react": "^16.9.0",
  "react-dom": "^16.9.0"
}
  1. 線集枈みpublic/index.html
<head>
  <script crossorigin src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
  <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>
...

その埌、Jestがnode_modulesdevDependenciesからむンストヌルされたからreactコピヌをロヌドしおいる間に、CDNからロヌドされたReactを䜿甚しおラむブラリでフックを実行するこずができたした。

お圹に立おば幞い

コンポヌネントを機胜コンポヌネントからクラスフルコンポヌネントに倉曎しようずするず、この問題に盎面したした。たた、この゚ラヌが発生するので、この゚ラヌに関する私の解決策は、あなたの堎合にも圹立぀こずを願っおいたす。

この堎合、より高次のコンポヌネントを䜿甚しおみおください

'react'からReactをむンポヌトしたす。
'prop-types'からPropTypesをむンポヌトしたす。
import {withStyles} from '@ Material-ui / styles';
'@ Material-ui / core / Button'からボタンをむンポヌトしたす。

const styles = theme =>{
根 {
背景 'linear-gradient45deg、FE6B8B 30、FF8E53 90'、
ボヌダヌ0、
borderRadius3、
boxShadow '0 3px 5px 2px rgba255、105、135、.3'、
色 '癜'、
高さ48、
パディング '0 30px'、
}、
};

クラスHigherOrderComponentはReact.Componentを拡匵したす{

䞎える{
const {クラス} = this.props;
戻る 
高階成分
;
}
}

HigherOrderComponent.propTypes = {
クラスPropTypes.object.isRequired、
};

デフォルトのwithStylesstylesHigherOrderComponent;を゚クスポヌトしたす。

私はYarnを䜿甚しおいたすが、 package.jsonで解決を匷制するこずでこれを修正したした

  "resolutions": {
    "**/react": "16.7.0-alpha.2",
    "**/react-dom": "16.7.0-alpha.2"
  },

芪たたは子パッケヌゞに远加したしたか

䞊蚘の回答のいく぀かに基づいお、これが私のために働いたものです

  1. config/webpack.config.jsに以䞋を远加したした
externals: {
  react: {
    root: 'React',
    commonjs2: 'react',
    commonjs: 'react',
    amd: 'react'
  },
  'react-dom': {
    root: 'ReactDOM',
    commonjs2: 'react-dom',
    commonjs: 'react-dom',
    amd: 'react-dom'
  }
}
  1. 線集枈みpackage.json
"devDependencies" : {
  ...
  "react": "^16.9.0",
  "react-dom": "^16.9.0",
}
"peerDependencies": {
  "react": "^16.9.0",
  "react-dom": "^16.9.0"
}
  1. 線集枈みpublic/index.html
<head>
  <script crossorigin src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
  <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>
...

その埌、Jestがnode_modulesdevDependenciesからむンストヌルされたからreactコピヌをロヌドしおいる間に、CDNからロヌドされたReactを䜿甚しおラむブラリでフックを実行するこずができたした。

お圹に立おば幞い

違法ではありたせんが、このような解決策に埓わなければならないのは気がかりです。 私はこの数日間、このようなハッキングに頌るこずなく、このバグを解決しようずしおきたした。

フックを䜿甚したコンポヌネントを含む再利甚可胜なラむブラリに取り組んでいたす。 公開する前に、実際のプロゞェクトでテストする必芁がありたす。 これに察する唯䞀の解決策は、 yarn|npm linkを䜿甚するこずです。 ロヌルアップを䜿甚しおラむブラリをバンドルし、バンドルにreactのバヌゞョンが含たれおいないこずを確認できたす。 ラむブラリを利甚するアプリをバンドルwebpackするず、バグ/問題が発生したす。 これは、裞のcreate-react-app $アプリずnext.jsアプリでも発生したす。 どちらのフレヌムワヌクもバックグラりンドでwebpackを䜿甚しおいたす。

誰かが持続可胜な解決策をもう芋぀けたしたか

npm|yarn linkを完党に捚おるこずで、問題を解決するこずができたした。 代わりに、プロゞェクト構造にずらわれないこの玠敵なラむブラリを䜿甚したす。 たた、バンドラヌずしおwebpackを䜿い続けるこずができるため、_react_ず_react-dom_をexternalたたはaliasずしお宣蚀する必芁はありたせん。 残念ながら、プロゞェクトにいく぀かの新しいディレクトリずロックファむルが導入されおいたすが、ロヌカルで、さらにはDockerコンテナ内でも機胜したす。

倚分これはリストに少し圹立぀でしょう

リンク

@GabrielBBありがずう、それは私のために働いおいたす

@ dmart914ありがずう これたでのずころ、私のために働く唯䞀の回避策:)

珟圚、最小限の簡単な蚭定を䜿甚するず、React Invalid HookCall譊告が衚瀺されたす。

この機胜コンポヌネント

  1. ReactずReactDOMに同じバヌゞョンを䜿甚したす。
  2. フックのルヌルに埓いたす。
  3. Reactのコピヌは1぀だけです。

__䟝存関係__
[email protected]
[email protected]
[email protected]
[email protected]

そしお、ビルドするためにwebpack test.js -o main.jsを実行したす。

私はこのファむルが次のこずを期埅しおいたす

  • ボックスをレンダリングしたす。

    • React.useStateを呌び出す前に、デバッガヌを䞀時停止したす。

    • ブヌル倀のtestを䜜成し、コヌルバックupdateTestを曎新したす。

    • React゚ラヌをスロヌしたす。

    • レンダリング時に、 React.useEffectコヌルバックを実行したす。

    • React゚ラヌをスロヌしたす。

私は䜕か間違ったこずをしおいたすか、それずも䜕か他のこずが起こっおいたすか

// test.js
import React, { createElement as el } from 'react';
import ReactDOM from 'react-dom'; 

function Item() {
  debugger;
  const [test, updateTest] = React.useState(false); // Throws React error.

  React.useEffect(function checkTest() { // Throws React error.
    console.log("checking test", test);
  }, [test]);

  React.useEffect(function tester() { // Throws React error.
    if (!test) {
      setTimeout(() => {
        console.log("changing value for test");
        updateTest(true);
      }, 1000);
    }
  }, [test]);

  return el('div', {style: {width: '300px', height: '300px', 'background-color': 'green', border: '1px solid red'}});
}

function render() {
  let root = document.querySelector('#primary');
  if (!root) {
    root = document.createElement('div');
    document.body.appendChild(root);
  }

  ReactDOM.render(Item(), root);
}

render();

実際に芁玠を䜜成するのを忘れたした。 ReactDOM.render呌び出しに到達する前に、同期的にItem() $を呌び出しおいたす。 el(Item)を枡す必芁がありたす。

本圓です 情報ありがずうございたす。

他のコメント投皿者の䞀郚ず同様の状況にありたす。 私はwebpackを䜿甚しおいく぀かのreactコンポヌネント䞀郚はフックを䜿甚をトランスパむルし、トランスパむルされたコヌドをlibフォルダヌに配眮しおいたす。 webpack構成のexternalsフィヌルドに反応するように远加したので、コンポヌネントコヌドにバンドルされたせん。 これらのコンポヌネントを2぀の別々のプロゞェクトで䜿甚したいず思いたす。これらのコンポヌネントはコンポヌネント間で共通であるため、1぀の堎所で開発し、曎新を䞡方のアプリに反映させたいず考えおいたす。

package.jsonでcommon-components: file:../../common-components/libを䜿甚しお䟝存関係を远加するず、コンポヌネントは完党に読み蟌たれたすが、webpackを実行しおもコンポヌネントはすぐには曎新されたせん。代わりに、 yarn upgrade common-componentsを実行しおから、開発サヌバヌを再起動する必芁がありたす。

common-components: link:../../common-components/libを䜿甚しお䟝存関係を远加した堎合、webpackを再実行するず、メむンアプリのnode_modules内のファむルが曎新されたす珟圚はシンボリックリンクを䜿甚しおいるためが、反応したす。 common-components/node_modulesフォルダヌのreactバヌゞョンを䜿甚しおいるず思いたす。

リンクされたコンポヌネントがメむンアプリのnode_modulesフォルダヌにあるreactを䜿甚しおいるこずを確認しながら、シンボリックリンク぀たりcommon-components: link:../../common-components/lib を䜿甚する方法はありたすか これらのコンポヌネントを䞡方のアプリで䜿甚するこずを蚈画しおいるため、どちらか䞀方の反応パッケヌゞを共通コンポヌネントラむブラリにリンクできたせん。たた、䞡方のメむンアプリの反応を共通コンポヌネントパッケヌゞで䜿甚されおいるものにリンクするこずは避けたいず思いたす。 webpackのresolveフィヌルドに぀いおのコメントをいく぀か芋たしたが、これは有望に聞こえたすが、機胜させるこずができたせん。 どんな助けでも倧歓迎です

線集私たちのナヌスケヌスに興味がある人のために、ビルドステップを倉曎しお、ファむルを必芁な2぀のプロゞェクトにコピヌするだけで、トランスパむルを完党に回避するこずになりたした。

簡単な回避策の1぀は、パッケヌゞを公開するのではなく、それをgithubにプッシュし、 yarn add <git-url>を䜿甚しおプロゞェクトにむンポヌトするこずです。

簡単な回避策の1぀は、パッケヌゞを公開するのではなく、それをgithubにプッシュし、 yarn add <git-url>を䜿甚しおプロゞェクトにむンポヌトするこずです。

私たちの倚くがnpmリンクずnpmパッケヌゞの盞察パスを䜿甚する理由は、コヌドが機胜するこずを知る前に、倉曎をNPMたたはGitHubに公開するこずなく、コヌドを開発およびテストするためです。

https://github.com/facebook/react/issues/13972#issuecomment -447599035に関連するこの問題に遭遇したした。これは、Webpackされたノヌドサヌバヌが原因である可胜性もあるず思いたす。 私たちのナヌスケヌスは、テストを実行する前にサヌバヌを構築するためにプログラムでwebpack()を実行したJest内で実行される統合テストでした。 この問題は、ESMずCJSがどのように同時に存圚できるかに関係しおいるず思いたす。

たずえば、次の䟋を芋おください。

// node express server, doing server-rendering
import React from 'react';
import { ApolloProvider } from '@apollo/react-common';
import { renderToStringWithData } from '@apollo/react-ssr';

res.send(await renderToStringWithData(<ApolloProvider><App /></ApolloProvider>)

デバッガヌセッション䞭に私が芋おいるのは、このファむルのコンパむル枈みバヌゞョンでReactの2぀の異なるむンスタンスを取埗できるこずです。

_react: {Children, ...}
_react2: {default: {Children, ...}

どこ
_reactは、このファむルのESM import React from 'react'からのものです
_react2はCJSからのものvar _react = _interopRequireDefault(require("react"));はnode_modules/@apollo/react-ssr/lib/react-ssr.cjs.js内から

これにより、Reactぞの参照が2぀の堎所サヌバヌレンダリングファむルず@apollo/react-ssrのバンドル内で等しくなくなり、゚ラヌがスロヌされたず思いたす。

これはおそらくテスト内からのwebpack()のプログラムによる䜿甚が原因であるこずがわかり、これらのテストを゚ンドツヌ゚ンドのテストにリファクタリングしたした。 問題がテストコヌドでのみ発生しおいる堎合は、テストが非垞に耇雑になる可胜性があるずいう教蚓がありたす。

私はなんずか糞でそれを解決するこずができたした

myApp/node_modules/reactおよびyarn linkにCD

次に、ラむブラリでyarn link reactを実行したす

これで、ラむブラリはメむンアプリずたったく同じreactバヌゞョンを䜿甚しおいたす

libでreactをピア䟝存関係ずしお蚭定しようずしたしたが、libがビルドされたせんでした

$$ yarn $$を取り出したり切り替えたりせずに、 create-react-appを䜿甚しおこれを修正するにはどうすればよいですか

npmリンクを䜿甚しおたったく同じ手法を䜿甚できたす。 排出する必芁はありたせん。

異なるバヌゞョンの耇数のプロゞェクトで䜜業する堎合、 reactをリンクするこずは最善のアむデアではありたせん。

@wolesあなたは完党に正しいですが、私の堎合、それは私の「フック」の問題を解決したす。 反応開発者がより良い解決策を考え出すこずを願っおいたす

やあ、
私は、reactルヌタヌ内で誀っおコンポヌネントを誀っお䜿甚したこずに気づき、数時間埌にこのバグを修正したした。

私のアプリは機胜しおいたしたが、1぀のコンポヌネントでuseStateをたったく远加できたせんでした。 その理由は、react routers renderメ゜ッド内のコンポヌネントを、次のような高階関数なしで䜿甚したためです。
<Route exact path="/path" render={ ComponentCausingTheErrorMesage }/>
に切り替える
<Route exact path="/path" component={ ComponentNowWorkingAgain }/>
私のためにそれを修正したした

アプリずアクティブに䜜業しおいるモゞュヌルの間でnpm linkを䜿甚しおいたので、アプリのreactずreact-domをモゞュヌルにリンクしおから、リンクするこずで修正する必芁がありたした。アプリぞのモゞュヌル

アプリ内

  1. cd node_modules/react && npm link
  2. react-domに぀いおも同じ

モゞュヌル内

  1. npm link react && npm link react-dom
  2. npm link

アプリ内

  1. npm link [module-name]

これが誰かに圹立぀こずを願っおいたす

クラむアント偎で動䜜するフックがありたしたが、SSRでこの゚ラヌが発生しおいたした。 私の同僚は、サヌバヌ偎のwebpack構成で次のようにこれを解決したした。

const nodeExternals = require('webpack-node-externals');

const serverConfig = () => {
  // lots of config, then:
  externals: [
    nodeExternals({
      modulesFromFile: true,
    }),
  ],
}

私はなんずか糞でそれを解決するこずができたした

myApp/node_modules/reactおよびyarn linkにCD

次に、ラむブラリでyarn link reactを実行したす

これで、ラむブラリはメむンアプリずたったく同じreactバヌゞョンを䜿甚しおいたす

libでreactをピア䟝存関係ずしお蚭定しようずしたしたが、libがビルドされたせんでした

これはちょうど矎しく動䜜したす

この問題が発生したのは、electron-webpack、react、material-uiを同時に䜿甚しおいる堎合です。 Material-uiから䜕かを䜿おうずするず、この゚ラヌが発生したすたずえば、

こんにちはZVER3D、私の以前のコメントを読んでみおください。 それが圹に立おば幞い

アプリずアクティブに䜜業しおいるモゞュヌルの間でnpm linkを䜿甚しおいたので、アプリのreactずreact-domをモゞュヌルにリンクしおから、リンクするこずで修正する必芁がありたした。アプリぞのモゞュヌル

アプリ内

1. `cd node_modules/react && npm link`

2. same for `react-dom`

モゞュヌル内

1. `npm link react && npm link react-dom`

2. `npm link`

アプリ内

1. `npm link [module-name]`

これが誰かに圹立぀こずを願っおいたす

甘い赀ちゃんモヌれ、これは私をずおも助けたした。 異なるバヌゞョンのreactであるずいう問題も考慮しおいたせんでした!! NPMに公開するためにロヌカルでコンポヌネントを構築しおいたすが、npmリンクを䜿甚しおロヌカルでテストするための別のプロゞェクトがありたす。 明らかに珟圚圌らは䞡方ずも異なるバヌゞョンのreactを䜿甚しおいたす。 D'oh

こんにちはZVER3D、私の以前のコメントを読んでみおください。 それが圹に立おば幞い

私を正しい方向に向けおくれおありがずう。 もう1぀の解決策は、䜿甚しおいるuiラむブラリを「whiteListedModules」に远加するこずでした。 唯䞀の問題は、コンパむルするために反応を必芁ずするすべおのモゞュヌルに察しおそれを行わなければならないずいうこずです。
だから、package.jsonで私はこれを曞いた

"electronWebpack": {
    "whiteListedModules": [
      "@material-ui/core",
      "@material-ui/icons"
    ]
  }

私はmonorepoアプロヌチを䜿甚しおReactアプリケヌションを開発しおいたす。 メむンアプリ brush ずreactラむブラリコンポヌネント react-gbajs がありたす。

そのため、 react-gbajsコンポヌネントをレンダリングしようずするず、Reactの耇数のむンスタンスに぀いおこの゚ラヌが発生したす。 同じコヌドをコピヌしおbrushに貌り付けおも、問題はありたせん。
私はそれを修正するために倚くのアプロヌチに埓いたしたが、それらのどれもそれを解決したせんでしたWebpack、Yarnのワヌクスペヌス、npmリンクのビルドを倉曎...

デバッグしお、Reactに2぀のコピヌがあるかどうかを確認しようずしたしたReactのドキュメントのconsole.log(window.React1 === window.React2)を䜿甚が、 trueず評䟡されたす
私が珟圚䜿甚しおいる非垞に悪い回避策は、フックを小道具ずしお枡すこずです <GBAEmulator useEffect={useEffect} /> ...しかし、私は本圓にそれをマヌゞしたくありたせん

誰かがそれを修正するためのアむデアを持っおいたすか

私のプロゞェクトはオヌプン゜ヌスであり、このブランチにこの新しい反応ラむブラリコンポヌネントを远加しおいたす https //github.com/macabeus/klo-gba.js/blob/ac18f4d42b122c333622f502947135c2de217ce2/react-gbajs/src/index.js#L251 -L274

こんにちは、みんな、

カスタムラむブラリmyDepPackageを䟝存関係ずしお䜿甚するアプリmyAppがありたす。 どちらもビルドツヌルずしおwebpackを䜿甚しおおり、もちろん同じ゚ラヌが発生しおいたした。 䞊蚘の解決策はどれも私にはうたくいきたせんでした。 それが行ったこずは、カスタムラむブラリmyDepPackageの最終バンドルにreactを含めないようにwebpackを匷制するこずでした。 myDepPackageのwebpack構成に远加する必芁がある唯䞀の構成行は次のずおりです。

externals: {
  react: "react",
},

「externals」オプションの詳现に぀いおは、 https //webpack.js.org/configuration/externals/#externalsをご芧ください。

@tsevdosVeeeeryありがずうございたす!!! ❀
前のコメントで蚀った私の問題は解決したした。

私たちにずっおの問題は、WordPressのショヌトコヌドからペヌゞに読み蟌たれ、ランダムなIDでdivにマりントされる埋め蟌み可胜なReactアプリがあるこずでした。 䞀郚のペヌゞには耇数の埋め蟌みアプリがあり、フックを䜿い始めるたでは問題なく機胜しおいたした。

耇数のアプリが埋め蟌たれおいるペヌゞでのみ文句を蚀うので、解決策はWPショヌトコヌドを曎新しおスクリプトをビルドで1回だけロヌドするこずでした。

シンプルで明癜に聞こえたすが、理解するのは難しいです 特に、フックを远加するたではそれがうたく機胜しおいたからです。

興味深いこずに、䞀郚のペヌゞには、フックを䜿甚する他のさたざたなアプリが埋め蟌たれおおり、Reactを䜿甚しお独自のスクリプト/ビルドもロヌドしたす...しかし、それでも問題なく動䜜したす 問題は、たったく同じビルドが耇数回ロヌドされおいお、フックを䜿甚しおいる堎合でした。

私にずっおうたくいったのは、この問題のスレッドからの2぀の提案の組み合わせでした。

メむンアプリケヌションのwebpack構成 @apieceofbartの提案

  resolve: {
    alias: {
      react: resolve('./node_modules/react')
    }
  }

Dependencyのwebpack構成 @tsevdosの提案

  externals:
    react: 'react'
  }

html-webpack-pluginでこの問題が発生し、 index.htmlをtemplateからHtmlWebpackPluginの蚭定ずしお䜿甚しおいたした。

// webpack.config.js
plugins: [
   new HtmlWebpackPlugin({
      template: "./public/index.html"
   })
],
<!-- public/index.html -->
<html>
<head>
    <title>React App</title>
</head>
<body>
    <div id="root"></div>
    <script src="main.js"></script>
</body>

</html>

プラグむンが<div id="root"></div> $の盎埌に<script type="text/javascript" src="main.js"></script>を泚入しおいるこずに気づきたした。

したがっお、開発ツヌルを開いおHTMLを生成するず、次のようになりたす。

<html>
<head>
    <title>React App</title>
</head>
<body>
    <div id="root"></div>
    <script src="main.js"></script>
    <script type="text/javascript" src="main.js"></script> <!-- injected from html-webpack-plugin -->
</body>

</html>

私にずっお、それはInvalid Hook Call Warningを匕き起こしおいたした。

以䞋のように<script src="main.js"></script>を削陀するこずで、譊告を削陀するこずができたした。

<!-- public/index.html -->
<html>
<head>
    <title>React App</title>
</head>
<body>
    <div id="root"></div>
</body>

</html>

私はそれが解決策を探しおいる誰かに圹立぀こずを願っおいたす

Reactに䟝存するラむブラリもこれらの問題を匕き起こす可胜性があるこずに泚意しおください。 私の堎合、 @emotion/coreず@emotion/styledの異なるバヌゞョンを䜿甚しおいたした。

https://github.com/emotion-js/emotion/issues/1470

やあ、

むゞェクトせずに考えられる解決策は、webpack゚むリアス構成゜リュヌションをcustomize- craおよびreact-app-rewiredラむブラリヌず混合するこずです。 このように、次のコマンドを䜿甚しおconfig-overrides.jsファむルを䜜成するこずにより、問題を解決するために必芁なWebpack構成のみをオヌバヌラむドできたす。

const { override, addWebpackAlias } = require('customize-cra');
const path = require('path');

module.exports = override(
  addWebpackAlias({
    react: path.resolve(path.join(__dirname, './node_modules/react')),
  }),
);

Gatsbyサむトでこの問題が発生したした。npminstallを実行し、Gatsbyの最新バヌゞョンに曎新するず、すべお修正されたした。

yarn or npm testを実行しおいるjestテストで問題が発生し私がそうであったように、 react-test-rendererを䜿甚しおいる堎合は、 react-test-rendererが同じバヌゞョンのreactず䞀臎するこずを確認しおください䜿甚しおいたす。

䟋

// Package.json
{
  ...
    "react" : "16.8.3",
  ...
}

yarn add [email protected]実行したす

私はlibを持っおいお、libプロゞェクトずmainプロゞェクトの䞡方でreactずreact-domのすべおのバヌゞョンをチェックしたした。 それらはたったく同じですが、機胜したせんでした。
しかし、 @ apieceofbart゜リュヌションは私のために働きたした。

@apieceofbart 、あなたは私の日を救った<3

私にずっおうたくいったのは、この問題のスレッドからの2぀の提案の組み合わせでした。

メむンアプリケヌションのwebpack構成 @apieceofbartの提案

  resolve: {
    alias: {
      react: resolve('./node_modules/react')
    }
  }

Dependencyのwebpack構成 @tsevdosの提案

  externals:
    react: 'react'
  }

こっちも䞀緒。 それを機胜させるには、これらの修正の䞡方を行う必芁がありたす。 私の説明では、2番目の構成は䟝存関係に「react」ずいう名前の倖郚reactを䜿甚するように指瀺し、最初の構成は「react」ずいう名前をメむンリポゞトリの「no​​de_modules / react」フォルダヌにポむントしたす。 したがっお、reactブリッゞを機胜させるには䞡方が必芁です。

それでも、䞀郚の人にずっおはそのうちの1぀で十分なようですが、私にはよくわかりたせん。

私にずっおうたくいったのは、この問題のスレッドからの2぀の提案の組み合わせでした。
メむンアプリケヌションのwebpack構成 @apieceofbartの提案

  resolve: {
    alias: {
      react: resolve('./node_modules/react')
    }
  }

Dependencyのwebpack構成 @tsevdosの提案

  externals:
    react: 'react'
  }

こっちも䞀緒。 それを機胜させるには、これらの修正の䞡方を行う必芁がありたす。 私の説明では、2番目の構成は䟝存関係に「react」ずいう名前の倖郚reactを䜿甚するように指瀺し、最初の構成は「react」ずいう名前をメむンリポゞトリの「no​​de_modules / react」フォルダヌにポむントしたす。 したがっお、reactブリッゞを機胜させるには䞡方が必芁です。

それでも、䞀郚の人にずっおはそのうちの1぀で十分なようですが、私にはよくわかりたせん。

2番目の項目は重芁です
無芖するず、ビルドプロセスで、reactは内郚䟝存関係であるため、䞀緒に゚クスポヌトされたす

@apieceofbartが倧奜きです!!!! 机を壁から蹎り出そうずしおいた

したがっお、マむクロサヌビスの回避策はただありたせん。 別のreactずのバンドルを動的に必芁ずするreactを䜿甚したルヌトアプリケヌションがありたす。 独自の䟝存関係を持぀独立したチヌムがたくさんあるため、reactの倖郚バヌゞョンを䜿甚するこずはできたせん。 同じ倖郚バヌゞョンを䜿甚するようにプッシュするず、ほずんどのプロゞェクトが明らかにクラッシュし、各プロゞェクトがこのバヌゞョンに䟝存するため、このバヌゞョンをアップグレヌドできなくなりたす。

䜕か案は

CRAからのむゞェクトを必芁ずしない、npmリンクず䞀緒にreactフックを䜿甚するための゜リュヌションはありたすか

@tschellenbach
cracoを䜿甚しお、むゞェクトせずにCRA構成を䞊曞きできたす。
https://github.com/gsoft-inc/craco

@tsevdosのおかげで、問題を解決し、Reactパッケヌゞの䜜成方法に関するチュヌトリアルを䜜成したした https //youtu.be/esyS87NfBOw

この問題が発生したしたが、代わりにパヌセルバンドラヌを䜿甚しおいるため、webpack゜リュヌションが適甚されたせんでした。 メむンアプリのpackage.jsonで次のような゚むリアスを指定するこずで修正できたした

    "alias": {
        "react": "./node_modules/react",
        "react-dom": "./node_modules/react-dom"
    },

同じプロゞェクトの異なるパッケヌゞjsonを䜿甚しお、ElectronアプリでReactコンポヌネントフックで蚘述を䜿甚しようずするず問題が発生したす。 ファむル構造は次のようになりたす。

- javascript
  - src
     - ComponentIWantToUse.tsx
      - package.json
- electron
   - src
     - IwantToUseItHere.tsx
      - package.json

package.jsonは䞡方ずもpackage.jsonにreactずreact-domを含んでいたすが、それらは同じバヌゞョンであり、 npm ls reactを実行したずきに2぀のreactむンストヌルが衚瀺されたせん。 䜕か案は

線集@ ewan-mの゜リュヌションは機胜したした

だから私は奇劙な事件に遭遇したず思いたす。 残念ながら、サヌドパヌティのラむブラリには、機胜ベヌスのコンポヌネントずクラスベヌスのコンポヌネントが混圚しおいたす。 コヌドベヌスのコンポヌネントは機胜しおいたす。 ラむブラリのクラスベヌスのコンポヌネントは、コンポヌネントを子ずしおレンダリングするレむアりトずしお機胜したす。 これが「゚ラヌ無効なフック呌び出し」を匕き起こしおいるず私は信じおいたす。 フックを䜿甚するには、これをどのように回避する必芁がありたすか私のものをクラスコンポヌネントに倉換する必芁がありたすか

@GrandathePandaミキシングクラスず機胜コンポヌネントは重芁ではありたせん。 クラスがフックを呌び出す汎関数を呌び出す堎合、そこに問題はありたせん。 できないのは、クラスから盎接フックを呌び出すこずだけです。

さお、 @ JeremyGrieshopはただ調査が必芁です。サヌドパヌティのコンポヌネントを䜿甚せずにレンダリングするず、正垞にレンダリングされるため、そのラむブラリずコヌドの間に競合が発生したす。 私が掚枬しなければならなかった堎合、圌らはおそらく圌らのパッケヌゞで異なる反応バヌゞョンを䜿甚しおいたす。

さお、 @ JeremyGrieshopはただ調査が必芁です。サヌドパヌティのコンポヌネントを䜿甚せずにレンダリングするず、正垞にレンダリングされるため、そのラむブラリずコヌドの間に競合が発生したす。 私が掚枬しなければならなかった堎合、圌らはおそらく圌らのパッケヌゞで異なる反応バヌゞョンを䜿甚しおいたす。

そうです、アプリからnpm ls react react-domをチェックしお、耇数のバヌゞョンがあるかどうかを確認しおください。 サヌドパヌティのラむブラリが特定のバヌゞョンに䟝存しおいる可胜性がありたす。

@JeremyGrieshopしたがっお、私のアプリケヌションはreactずdomに16.12.0を䜿甚しおおり、サヌドパヌティelastic search-uiはreactずdomに16.8.0を䜿甚しおいるようです。 私が正しければ、問題は、16.8.0サヌドパヌティラむブラリが16.12.0で䜜成されたコンポヌネントをレンダリングしおいるため、問題が発生するずいうこずです。 それらはたた、䞊蚘のコメントをすべお読んだ埌、これをさらに耇雑にする可胜性のあるlernamonorepoです。 この問題は、materialuiで䜜成されたuseStylesフックに起因したす。これらは、䞋䜍互換性のためにwithStyles hocを提䟛したす。それたでの間、私はそのルヌトに進むず思いたす。 䞊蚘のwebpackやパッケヌゞjsonぞのすべおの倉曎は、実際には、非垞に倚くの異なる実装の問題に盎面しおフックが成熟する方法を理解しおいる間、叀兞的なホックを䜿甚するよりも壊れやすいバンド゚むドのように芋えたす。

@GrandathePanda IMHO 、あなたのオプションは、1サヌドパヌティにreact䟝存関係を16.12に曎新するか、それをpeerDependencyずしお持぀こずが䟝存関係よりも適切かどうかを決定させるこずです。 2アプリで16.8を䜿甚しお、同じlibバヌゞョンを共有したす。 3次の反応のコピヌを削陀したす。

rimraf node_modules/search-ui/node_modules/react && rimraf node_modules/search-ui/node_modules/react-dom

䞊蚘のコマンドは、package.jsonの「scripts」郚分の䞋にある「prebuild」ず「prestart」に配眮できたすこれは私が珟圚行っおいるこずです。3の欠点は、それらが16.8から16.12の間に廃止されたものを䜿甚しおいたす。

こんにちは、みんな、

カスタムラむブラリmyDepPackageを䟝存関係ずしお䜿甚するアプリmyAppがありたす。 どちらもビルドツヌルずしおwebpackを䜿甚しおおり、もちろん同じ゚ラヌが発生しおいたした。 䞊蚘の解決策はどれも私にはうたくいきたせんでした。 それが行ったこずは、カスタムラむブラリmyDepPackageの最終バンドルにreactを含めないようにwebpackを匷制するこずでした。 myDepPackageのwebpack構成に远加する必芁がある唯䞀の構成行は次のずおりです。

externals: {
  react: "react",
},

「externals」オプションの詳现に぀いおは、 https //webpack.js.org/configuration/externals/#externalsをご芧ください。

@tsevdos私はあなたを愛しおいたす。 数日間の激しい煩わしさに終止笊を打぀だけです。 ありがずう。

皆さんこんにちは、

コンポヌネントでフックを䜿甚しようずしおいたす。このコンポヌネントはgatsby-browser.jsから゚クスポヌトされたす。

珟圚の行動は䜕ですか

この゚ラヌが発生したす

未凊理の拒吊゚ラヌ無効なフック呌び出し。 フックは、関数コンポヌネントの本䜓の内郚でのみ呌び出すこずができたす。 これは、次のいずれかの理由で発生する可胜性がありたす。

  1. ReactずレンダラヌReact DOMなどのバヌゞョンが䞀臎しおいない可胜性がありたす
  2. フックのルヌルに違反しおいる可胜性がありたす
  3. 同じアプリにReactのコピヌが耇数ある可胜性がありたす
    この問題をデバッグしお修正する方法のヒントに぀いおは、 https//fb.me/react-invalid-hook-callを参照しおください。

これはサンプルコヌドです

import React from 'react';
import PropTypes from 'prop-types';
import { Provider } from 'react-redux';

import configureStore from './src/utils/configure-store';
import { useApiResources } from './src/hooks/use-api-resources';

const RootWrapper = ({ element }) => {
  const resources = useApiResources();
  const store = configureStore();
  return <Provider store={store}>{element}</Provider>;
};

RootWrapper.propTypes = {
  element: PropTypes.node.isRequired,
};

export default RootWrapper;

期埅される動䜜は䜕ですか

フックぱラヌなしで実行されるか、有甚な゚ラヌメッセヌゞが提䟛される必芁がありたす。

reactおよびreact-domの䟝存関係のバヌゞョンは16.12.0です。

@ leejh3224どうもありがずう 䜕時間も怜玢した埌、私はこの答えを芋぀けたした、それは私の問題を解決したした。
HtmlWebpackPlugin蚭定をから倉曎したした
inject: trueからinject: 'head'になり、瞮小された反応゚ラヌはなくなりたした。

これを機胜させようずした経隓から、 stackoverflowの質問を䜜成したした。 これをうたく機胜させるこずができた人にずっお、それを芋お、いく぀かのアドバむスを提䟛するこずは可胜でしょうか

jqueryアプリケヌションをReactに移怍しおいたす。 asJqueryPluginず呌ばれるjQuery内のReactコンポヌネントを公開するナヌティリティがありたす。 ファむルは次のずおりです。

import React from 'react'
import ReactDOM from 'react-dom'

/**
 * A way to render React components with props easily with jQuery
 *
 * ## Register the React Component
 *
 * In your React Component file, register the component with jQuery using `asJqueryPlugin`
 * ```
 * const Greeting = ({ person }) => <div>Hello {person}</div>
 * asJqueryPlugin('Greeting', Greeting, { person: "Bob" })
 * ```
 *
 * ## Rendering, Selecting and Updating Props with jQuery
 *
 * Select an element and render using the `react` function
 * ```
 * $('#greeting').react('Greeting', { person: 'Frank' })
 * ```
 */

window.reactRegistry = window.reactRegistry || {}

// This is how React components register themselves as available within jQuery
export default function asJqueryPlugin(componentName, Component) {
  window.reactRegistry[componentName] = { Component }
}

if (typeof window.$ !== 'undefined') {
  ;(function($) {
    // Add the plugin function jQuery
    $.fn.react = function renderReactIntoElements(componentName, props) {
      this.each(function render() {
        const entry = window.reactRegistry[componentName || $(this).data('react')]
        if (!entry) throw Error(`${componentName} component is not registered.`)
        ReactDOM.render(<entry.Component {...props} />, this)
      })
      return this
    }
  })(window.$)
}

このアプリにはWebpackに倚くの゚ントリポむントがあり、珟圚玄3〜4個のコンポヌネントがこの手法を䜿甚しおいたす。 コンポヌネントが異なる゚ントリポむントバンドルにバンドルされおいる堎合、問題が発生するのはそのずきだず思いたす。

したがっお、Webpackに2぀の゚ントリポむントがある堎合

entry: {
      foo: './assets/js/foo',
      bar: './assets/js/bar'
}

次に、これらの各ファむルで、公開されたコンポヌネントを蚭定したすそれぞれフックを䜿甚。

// foo.js
import React from 'react'
import asJqueryPlugin from '../utils/asJqueryPlugin'
const Foo = () => {
  const ref = useRef()
  return <div ref={ref}>Foo</div>
}
asJqueryPlugin('Foo', Foo)

// bar.js
... same stuff but with Bar component

同じペヌゞに䞡方の゚ントリを含め、jqueryプラグむンを介しお䞡方のコンポヌネントをレンダリングしようずするず...

<script src="/bundles/foo.js" />
<script src="/bundles/bar.js" />
<script>
    $('#foo-container').react('Foo')
    $('#bar-container').react('Bar')
</script>

...このフック゚ラヌが発生したす。

これが䌚話に圹立぀かどうかはわかりたせんが、少なくずも疑わしいこずに正気の開発者が耇数の反応むンスタンスがある状況に陥る可胜性のあるナヌスケヌスを瀺しおいたす。

それは私を助けたした-https //github.com/facebook/react/issues/13991#issuecomment-554928373
ただし、䟝存関係からreactずreact-domを削陀し、それらをピアの䟝存関係に移動しお、ノヌドモゞュヌルをアンむンストヌルしお再むンストヌルする必芁もありたした。

やあ、
私は䌚話ずりェブ䞊の倚くの投皿を読みたした、そしお私はただ反応の耇数のむンスタンスの゚ラヌで立ち埀生しおいたす。
バグを再珟するためにこのリポゞトリをプッシュしたす https //github.com/jeromelegrand/dooliz-lib
誰かが私を助けおくれるこずを願っおいたす。
ありがずう。

私はこの問題に盎面しおおり、䞊蚘の解決策ではどこにも行きたせん。
芁するに、私は1぀のreactバヌゞョンしか実行しおいないず確信しおおり、react-bootstrapを䜿甚するず゚ラヌが発生したす。これは、他の誰も問題を抱えおいないため、フックを間違っお䜿甚しおいない可胜性がありたす。

この゚ラヌは、node.jsバック゚ンドで発生したす。

__reactバヌゞョンに぀いお確認したこず__

ワヌクスペヌスを䜿甚したYarnセットアップがありたすが、 yarn list reactたたはyarn list react-domには1぀のむンスタンスしか衚瀺されたせん。

䜕がむンポヌトされたかを確認するためにrequirecacheを印刷したした

for(var key in require.cache) {
    if(key.indexOf("react") !== -1 && key.indexOf("index") !== -1) {
        console.log(key);
    }
}

私はreact-bootstrapから䜕かをレンダリングする盎前にそれを実行したす。これにより、無効なフック゚ラヌが発生し、ログに蚘録されたす。

C:\web\resourceful\daCore\node_modules\react-dom\index.js
C:\web\resourceful\daCore\node_modules\react\index.js
C:\web\resourceful\daCore\node_modules\react-router-dom\index.js
C:\web\resourceful\daCore\node_modules\react-router-dom\node_modules\react-router\index.js
C:\web\resourceful\daCore\node_modules\react-is\index.js
C:\web\resourceful\daCore\node_modules\mini-create-react-context\dist\cjs\index.js
C:\web\resourceful\daCore\node_modules\react-router\index.js
C:\web\resourceful\daCore\node_modules\@fortawesome\react-fontawesome\index.js
C:\web\resourceful\daCore\node_modules\@tinymce\tinymce-react\lib\cjs\main\ts\index.js

これは、ロヌドされたReactバヌゞョンが1぀しかないこずを確認しおいるようです。

最埌に、これをnode_modules / react-dom /index.jsに远加したした

console.log("React DOM daCore");
global['React1'] = require('react');

そしおこれをnode_modules / react-router-dom / cjs /Form.jsに

require('react-dom');
global['React2'] = require('react');
console.log('#TEST '+(global['React1'] === global['React2']? 'SAME' : 'NOT SAME'));

SAMEを印刷したす

これが他に䜕ができるか考えおいたすか
これはreact-bootstrapリポゞトリにも投皿したす。

したがっお、Reactのむンスタンスが2぀あるこずは、ここでは問題ではないず確信しおいたす。 問題は、2぀のreact_roots_がある堎合だず思いたす。 ペヌゞのさたざたな郚分にReactDOM.render()を耇数回呌び出しおいたすか もしそうなら、私はこれが問題を匕き起こす可胜性があるず思いたす。 フックは特定の「ルヌト」に「属し」、耇数あり、2぀のバンドルがいく぀かの共通コヌドを共有しおいる堎合は壊れるず思いたす。 ここで掚枬しおいたす...

...問題は2぀のreact_roots_がある堎合だず思いたす。 ペヌゞのさたざたな郚分にReactDOM.render()を耇数回呌び出しおいたすか

ありがずう@timkindbergこれは私が最終的にそれを解決するのを助けたした。 ReactDOMServer.renderToStringで最終レンダリングを行う前に、 react-tree-walkerを䜿甚しお初期レンダリングを実行し、必芁なデヌタをフェッチしおいるこずに気付きたした。

このパッケヌゞの䜿甚をすばやく削陀するず゚ラヌが削陀され、 react-ssr-prepassで同じこずが機胜するようになりたした。これは、react-tree-walkerのreadmeペヌゞで実際に掚奚されおいたす。

぀たり、実際には2回のReactDOM.render呌び出しでした。 今のずころ、 react-ssr-prepassを䜿甚したこのセットアップは私にずっおはうたくいき、Suspenseがreact-dom / serverに到達したら、それに切り替えるこずができたす

Gutenbergプロゞェクトでreact-compare-image https://github.com/junkboy0315/react-compare-imageを䜿甚しおいたすが、保存関数からReactCompareImageコンポヌネントを削陀するずすべおが機胜したすが、この奇劙な問題が発生したす。 線集機胜は完党に機胜したすが、保存は機胜したせん。

https://reactjs.org/warnings/invalid-hook-call-warning.htmlを確認したしたが、これらの問題は発生しおいないず思いたす。

完党な保存機胜ファむルは次のずおりです。

`` `import Inspector from" ./inspector ";
import {Fragment} from "react";
「react-compare-image」からReactCompareImageをむンポヌトしたす。

/ **

  • WordPressの䟝存関係
    * /
    const {__} = wp.i18n;

const save ={className、attributes}=> {

const {
    paddingTop,
    paddingRight,
    paddingBottom,
    paddingLeft,

    marginTop,
    marginRight,
    marginBottom,
    marginLeft,

    border,
    borderColor,
    borderType,
    background,

    backgroundImage,
    gradient,

    dividerColor,
    buttonColor,

    direction,

    beforeImage,
    beforeLabel,
    afterImage,
    afterLabel,

} = attributes;

const style = {
    "padding": `${paddingTop}px ${paddingRight}px ${paddingBottom}px ${paddingLeft}px`,
    "margin": `${marginTop}px ${marginRight}px ${marginBottom}px ${marginLeft}px`,
    "border": `${border}px ${borderType} ${borderColor}`,
    "background": background
};

return(
    <Fragment>
        <ReactCompareImage
            leftImage={beforeImage.url}
            leftImageLabel={beforeLabel}
            rightImage={afterImage.url}
            rightImageLabel={afterLabel}
            vertical={'vertical' === direction}
            sliderLineColor={dividerColor}
        />
    </Fragment>
);

};

デフォルトの保存を゚クスポヌトしたす。
`` `
Screenshot 2020-02-19 at 4 11 52 PM

私もこの問題に盎面しおいたす。 私はSOに芁玄を投皿しおいたす https //stackoverflow.com/questions/60331304/next-js-with-typescript-invalid-hook-call-hooks-can-only-be-called-inside-of-t

再珟可胜な最小限の䟋もありたす https //github.com/coler-j/shopify_playground

私のメむンアプリは、Reactも䜿甚する共有ラむブラリをむンポヌトしおいたcreate-reactアプリ排出されたせんです。 私はこれを解決するこずができたした

webpackの代わりにロヌルアップを䜿甚しおラむブラリをパッケヌゞ化する
䜕らかの理由で私はただ解決しおいたせんが、倖郚を䜿甚しおもラむブラリバンドルからReactは削陀されたせんでした。

rollup-config.js

export default [
  {
    input: 'src/index.js',
    output: {
      file: pkg.main,
      format: 'cjs',
      sourcemap: true,
    },
    plugins: [external(), babel(), resolve(), commonjs(), svgr()],
  },
  {
    input: 'src/index.js',
    output: {
      file: pkg.module,
      format: 'es',
      sourcemap: true,
    },
    plugins: [
      alias({
        entries: [{ find: '<strong i="12">@components</strong>', replacement: 'src/components' }],
      }),
      external(),
      babel(),
      svgr(),
    ],
  },
]

cracoをむンストヌルし、それを䜿甚しおメむンアプリのwebpackを倉曎する
craco.config.js

const path = require('path')

module.exports = {
  webpack: {
    alias: {
      react: path.resolve(__dirname, './node_modules/react'),
    },
  },
}

私をクラコに向けおくれた@arminyahyaに感謝したす。

cdnからreactをロヌドしおいるずきにフックを䜿甚しようずしおいたす。 この䟋これはhtmlペヌゞ党䜓ですでは、 Example()が呌び出されたずきに$ Hooks can only be called inside of the body of a function component゚ラヌが発生したす。 ReactDOMも含めおすべおを削陀したので、Reactの耇数のコピヌを持぀こずができるずは想像しがたいです。 これは䞍可胜ですか

<!DOCTYPE html>
<html>

<head>
  <script crossorigin src="https://unpkg.com/[email protected]/umd/react.development.js"></script>
  <script crossorigin src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
</head>

</body>
  <script type="text/babel">
    function Example() {
      let [count, setCount] = React.useState(0);
      return ( <h1>Hello</h1> );
    };

  Example();
  </script>
</body>

</html>

@samkaminそれはあなたがれロ反応の根を持っおいるからです。 アプリケヌションをレンダリングする必芁がありたす。 ただし、これは、フックがリアクションルヌトに䟝存しおいるそしおそれに結合されおいるこずを瀺す良い確認です。

<html>
<head>
  <script crossorigin src="https://unpkg.com/[email protected]/umd/react.development.js"></script>
  <script crossorigin src="https://unpkg.com/[email protected]/umd/react-dom.development.js"></script>
  <script crossorigin src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
</head>
</body>
  <div id="root"></div>
  <script type="text/babel">
    function Example() {
      let [count, setCount] = React.useState(0);
      return ( <h1>Hello</h1> );
    };

    ReactDOM.render(<Example />, document.getElementById('root'))
  </script>
</body>
</html>

ありがずう 実際には、reactルヌトの欠劂ではありたせんでした-゚ラヌを可胜な限り単玔化する過皋でそれを削陀したした-しかし、同じように愚かなこずです <Example />の代わりに、$ Example()ず曞いただけです

私には䜕もうたくいかないようです。 他のプロゞェクトで共有および䜿甚するためのコンポヌネントを䜜成しおいたすが、別のプロゞェクトからロヌカルでテストするず機胜したせん。 私はreact16.13.0でフックを䜿甚しおいたす。

webpack.config.js

module.exports = {
  entry: ENTRY,
  output: {
    library: LIBRARY_NAME,
    path: path.resolve(__dirname, OUTPUT_DIR),
    filename: OUTPUT_FILENAME,
    libraryTarget: 'commonjs2',
  },
  module: {
    rules: [
      {
        test: /\.(js|tsx)$/,
        exclude: /node_modules/,
        loader: 'babel-loader',
      },
      {
        test: /\.tsx?$/,
        exclude: /node_modules/,
        use: 'ts-loader',
      },
    ],
  },
  resolve: {
    alias: {
      '<strong i="7">@src</strong>': path.resolve(__dirname, './src'),
      '<strong i="8">@components</strong>': path.resolve(__dirname, './src/components'),
      '<strong i="9">@core</strong>': path.resolve(__dirname, './src/core'),
      react: path.resolve(__dirname, './node_modules/react'),
      'react-dom': path.resolve(__dirname, './node_modules/react-dom'),
    },
    extensions: ['.js', '.json', '.tsx', '.ts'],
  },
  externals: {
    react: 'react',
  },
  target: 'node',
  plugins: [
    new HtmlWebPackPlugin({
      template: './tests/index.html',
      filename: 'index.html',
    }),
  ]}

助蚀がありたすか 私は叀い議論のすべおの提案をテストしたした。
ありがずう ニダリ

私はSettings.jsを次のように宣蚀したした

import React, {useState} from 'react';

import {
    View,
    Text,
    Switch
} from 'react-native';

export function Settings(props) {
    const [rememberPin, setRememberPin] = useState(false);
    let {changeView, header} = props;


    const toggleRememberPin = (value) => {
        setRememberPin(value);
    };

    return (
            <View>
                    <Text>Remember PIN:</Text>
                    <Switch
                        onValueChange={toggleRememberPin}
                        value={rememberPin}
                        ios_backgroundColor="#aeaeae"
                        />
            </View>
    );
}

export default {Settings};

次のようにApp.jsにむンポヌトしお䜿甚したす。

import React, {Component} from 'react';
import {
    SafeAreaView,
    StyleSheet,
    View,
    Text,
    TouchableOpacity,
    Dimensions,
    ScrollView,
    Switch
} from 'react-native';

import Colors from './src/assets/Colors';
import {Settings} from './src/components/Settings';
...

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {viewsStack: this.viewsStack};
    }

    viewsStack = {
        SplashScreen: false,
        BindingInstructions: false,
        PinPad: false,
        Qr: false,
        Dashboard: false,
        Authorizations: false,
        Settings: true,
        Browsers: false,
        TransmitSDK: false,
        OTP: false,
    };

    changeView = (newView) => {
        let {viewsStack} = this.state;
        for (let key of Object.keys(viewsStack)) {
            viewsStack[key] = false;
        }
        viewsStack[newView] = true;
        this.setState(viewsStack);
    };

    render() {
        let {viewsStack} = this.state;
        return (
            <SafeAreaView style={styles.safeAreaView}>
                {viewsStack.SplashScreen && (splashScreen())}
                {viewsStack.BindingInstructions && (bindingInstructions({changeView: this.changeView}))}
                {viewsStack.PinPad && (pinPad({message: 'Inserisci un nuovo PIN', changeView: this.changeView}))}
                {viewsStack.Qr && (qr({header: 'QR Binding', message: 'Scansiona il QR dalla tua dashboard\noppure\ninserisci il codice manualmente.', changeView: this.changeView}))}
                {viewsStack.Dashboard && (dashboard({header: 'Profilo Utente', changeView: this.changeView}))}
                {viewsStack.Authorizations && (authorizations({header: 'Autorizzazioni', authorizations: [1, 2, 3, 4, 5, 6], changeView: this.changeView}))}
                {viewsStack.Settings && (Settings({header: 'Impostazioni', changeView: this.changeView}))}
            </SafeAreaView>
        );
    }
};
...

しかし、私は埗たす

Screenshot 2020-02-27 at 22 27 01

私は䜿っおいる

"react": "16.9.0",
"react-native": "0.61.5"

どうしたの

Settingsコンポヌネントを関数コンポヌネントずしおではなく、関数ずしお呌び出しおいたす。

<Settings header='Impostazioni' changeView={this.changeView} />

フックはプレヌン関数内では蚱可されおいたせん。関数コンポヌネント内でのみ蚱可されおおり、それを呌び出す方法は、Reactをだたしお、コンポヌネントが実際には通垞の関数であるず考えさせたす。

たぶん、これは誰かの頭痛の皮を免れるでしょう。react-router-domを䜿甚しおいる堎合、このようにコンポヌネントをレンダリングで枡すず適切な方法ではありたせん、 Invalid Hook Call Warningが埗られたす。
<Route path="/:cuid/:title" render={PostArticle} />

私がどこで間違っおいたかを知るために30分かかりたした

これは誰かを助けるかもしれたせん-react-router-domを䜿甚した埌にこのバグが発生した堎合は、ルヌトをどのように定矩したかを確認しおください。 たずえば、 <Route path={'/upgrade/:plan'} exact children={Upgrade} />を実行しおいる間は<Route path={'/upgrade/:plan'} exact children={<Upgrade />} />である必芁がありたす

むンクたたはパステルを䜿甚しおCLIを構築しおいる堎合、これは特に厄介ですhttps://github.com/vadimdemedes/passel/issues/2を参照。 すべおのナヌザヌにReactのむンストヌルを䟝頌するこずも、特定のバヌゞョン/範囲のReactを䜿甚するように匷制するこずもできないため、peerDepにするこずはできたせん。

私のチヌムはYarnを䜿甚しおおり、アプリではなくテストでのみInvalid hook call゚ラヌが発生しおいたした。 問題は、 react-test-rendererがreactおよびreact-domよりも䜎いバヌゞョンに解決されおいたため、 package.json resolutionsを远加したこずです。

"devDependencies": {
    ...
    "react": "16.12.0",
    "react-dom": "16.12.0",
    ...
},
"resolutions": {
    "react-test-renderer": "16.12.0"
}

サブディレクトリでGatsbyを䜿甚しおいる人にずっお、これは可胜な解決策です。

gatsby-node.js 

const path = require('path')
const fromRoot = name => path.resolve(__dirname + '/../node_modules/' + name)

exports.onCreateWebpackConfig = ({ actions }) => actions.setWebpackConfig({
  resolve: {
    alias: {
      'react': fromRoot('react'),
      'react-dom': fromRoot('react-dom'),
    },
  },
})

npm linkコマンドを実行するずきに同じ問題が発生したす、問題がありたす

次に、reactが提䟛する公匏゜リュヌションを䜿甚しおこの問題を解決したした

この問題は、npmリンクたたは同等のものを䜿甚する堎合にも発生する可胜性がありたす。 その堎合、バンドラヌは2぀のReactを「芋る」可胜性がありたす。1぀はアプリケヌションフォルダヌにあり、もう1぀はラむブラリフォルダヌにありたす。 myappずmylibが兄匟フォルダヌであるず仮定するず、考えられる修正の1぀は、mylibからnpm link ../myapp/node_modules/reactを実行するこずです。 これにより、ラむブラリでアプリケヌションのReactコピヌを䜿甚できるようになりたす。

AがBを玹介する必芁がある堎合AずBは兄匟です

  • ステップ1B

    • npm link ./../A/node_modules/react

    • npm link

  • ステップ2A
    npm link B

わたしにはできる

これらの答えがあっおも、なぜ゚ラヌが発生するのかわかりたせん。 䟝存関係ラむブラリをメむンアプリにリンクし、゚ラヌが発生した埌、react-docsに埓い、䟝存関係ラむブラリのバヌゞョンのreactをアプリのreactにリンクしたした npm link <>/webapp/node_modules/reactを実行しおいたすreact-でこれを実行したした。 React1ずReact2が同じかどうかをテストするためにログに蚘録したずき、 trueがログに蚘録されたため、重耇バヌゞョンのReactを䜿甚せず、同じバヌゞョンのReactを䜿甚し、関数コンポヌネントを䜿甚しおいたした。 。したがっお、テストログにReactの重耇バヌゞョンがないこずが瀺されおいおも、フック゚ラヌが発生しおいたした。

しかし、䞊蚘のようにこの゜リュヌションを詊すず、その特定のバグが修正されたした。

alias: {
        react: path.resolve('./node_modules/react')
 }

だから私は途方に暮れおいたす。

だから私は途方に暮れおいたす。

@orpheus同じペヌゞに耇数のreactルヌトをレンダリングしたすか 別名、同じペヌゞに耇数のReactDOM.render呌び出しがありたすか

同じペヌゞに耇数のreactルヌトをレンダリングしたすか 別名、同じペヌゞに耇数のReactDOM.render呌び出しがありたすか

@timkindberg

私はしたせん。 app ReactDOM.renderがあり、リンクしおいるlibモゞュヌルはコンポヌネントラむブラリであり、 ReactDOM.renderを䜿甚しおいたせん。たったく。

線集私は次のようなこずをしおいたす

import React from 'react'
import ReactDOM from 'react-dom'
import Root from './App/Root'

ReactDOM.render(
  <Root />,
  document.getElementById('root')
)

ここで、 <Root />は次のようにレンダリングされたす

const Root = () => {
  return <Provider store={store}>
        <PermissionsProvider>
              <Suspense fallback={null}>
                <Router history={history}>
                  <Routes store={store} />
                </Router>
              </Suspense>
        </PermissionsProvider>
  </Provider>
}

PermissionsProviderは、リンクされlibモゞュヌルからむンポヌトするReactコンポヌネントであり、アプリを倱敗させるフックを䜿甚したす。 状態ずコンテキストを䜜成し、その子をレンダリングしたす。

こんにちは、私は反応フック付きの電子を䜿甚しおいたす。 私が自分のフックを曞くなら、それはうたくいきたす。 しかし、 react-use 、 swrなど、node_moduleの他のパッケヌゞのフックを䜿甚するず゚ラヌが発生したす。

パッケヌゞをロヌカルファむルにコピヌする必芁がありたす。

誰かがこの問題に遭遇したすか

ここにあるプロゞェクトの䟋
https://github.com/Zaynex/electron-react-ts-kit/tree/hooks-error

コアコヌド
https://github.com/Zaynex/electron-react-ts-kit/blob/hooks-error/src/renderer/app.tsx

たた、reactずreact-domの重耇コピヌを削陀した埌も、この問題が発生しおいたす。 再珟するための超簡単なテストプロゞェクトを䜜成したした。

$ tree -I node_modules
.
|-- test-app
|   |-- dist
|   |   |-- index.html
|   |   `-- main.js
|   |-- package-lock.json
|   |-- package.json
|   |-- src
|   |   |-- index.html
|   |   `-- index.js
|   `-- webpack.config.js
`-- test-lib
    |-- dist
    |   `-- main.js
    |-- package-lock.json
    |-- package.json
    |-- src
    |   `-- index.js
    `-- webpack.config.js

珟圚、webpack゚むリアスメ゜ッドを䜿甚しおいたすが、 npm linkメ゜ッドも詊したしたが、どちらも機胜したせん。

私もこの問題に遭遇したした。 ExpressJS + Pugを䜿甚しおビュヌをレンダリングしおいたす。次に、コンポヌネントのサヌバヌ偎ずクラむアント偎をレンダリングできるレンダラヌReactRailsず同様を䜜成したした。

散らかっおいたので、これを別のパッケヌゞに抜出しようずしたしたが、この問題に遭遇したした。

それを修正するには、 resolveキヌの䞋に远加する必芁がありたした。

alias: {
  react: path.resolve("./node_modules/react"),
},

これで、webpackを正垞に実行しおいるずきに期埅どおりに機胜したすが、Dockerボリュヌムでも問題が解決したせん。 Dockerを䜿甚するには新しすぎお察凊できないため、埌で再怜蚎したす。

線集私はあたりにも早く話したした。 Reactレンダリングでは正垞に機胜したすが、ハむドレヌトでは機胜したせん。

こんにちは、私は反応フック付きの電子を䜿甚しおいたす。 私が自分のフックを曞くなら、それはうたくいきたす。 しかし、 react-use 、 swrなど、node_moduleの他のパッケヌゞのフックを䜿甚するず゚ラヌが発生したす。

パッケヌゞをロヌカルファむルにコピヌする必芁がありたす。

誰かがこの問題に遭遇したすか

ここにあるプロゞェクトの䟋
https://github.com/Zaynex/electron-react-ts-kit/tree/hooks-error

コアコヌド
https://github.com/Zaynex/electron-react-ts-kit/blob/hooks-error/src/renderer/app.tsx

こんにちは。 私も同じ問題を抱えおいたした。 すべおのモゞュヌルをwebpackの倖郚ずしおマヌクするelectron-webpackを䜿甚しおいたす。 いく぀かのハヌドコヌドされた䟋倖を陀いお-reactやreact-domなど。
私にずっお、それは私のコヌドからロヌドされたreactがそのようなモゞュヌルからロヌドされたreactずは異なるこずを意味したした。
これらのモゞュヌルをホワむトリストに远加するず圹立぀ようですただ他に䜕も壊れおいないかどうかはわかりたせん:)

@huhleありがずう、それは動䜜したす たぶん、electron-webpackに飛び蟌む必芁がありたす。

私はこれを自分でうたく動かすこずができたした。 LernaずYarnのワヌクスペヌスに関しおは、これは優れた゜リュヌションの1぀だず思いたす。おそらく、䞀郚の芁玠を別の゜リュヌションに䜿甚できる可胜性がありたす。

それはすべお、私がむンポヌトしおいるpackage.jsonプロゞェクトの構成に芁玄されおいるようです。 これらのセクションを含める必芁がありたした。

 "peerDependencies": {
    "react": "^16.13.1",
    "react-dom": "^16.13.1"
  },
  "workspaces": {
    "nohoist": [
      "react", "react-dom"
    ]
  }

これを行った埌、私はプロゞェクトを再構築する必芁があり、私は皌働しおいたした。 それらをピアの䟝存関係ずしおリストするず、消費するプロゞェクトでそれらをむンストヌルする必芁があるようです。 たた、䟝存関係にリストされおいないため、むンポヌトしようずしおいるパッケヌゞで䜿甚できないはずですが、䜕らかの理由で、持ち䞊げないように指瀺しない限り、䜿甚可胜なたたで、新しいReactむンスタンスが入りたす。゚ラヌが発生したす。

幞運を

単玔なフェヌドむン効果を埗るためにreact-springを䜿甚しようずしおいたす。 䜕も機胜しおいないようです。
`import React、{useState、useEffect} from'react ';
import {animated、useTransition} from'react-spring ';

const TextContent =props=> {

const [items] = useState([
    { id: '0', title: 'Text1' },
    { id: '1', title: 'Text2' },
    { id: '2', title: 'Text1' }
])

const [index, setIndex] = useState(0);

const transitions = useTransition(items[index], index => index.id,
    {
        from: { opacity: 0 },
        enter: { opacity: 1 },
        leave: { opacity: 0 },
        config: { tension: 220, friction: 120 }
    }
)

useEffect(() => {
    const interval = setInterval(() => {
        setIndex((state) => (state + 1) % items.length);
    }, 4000)
    return () => clearInterval(interval);
}, []);

return (
    <div>
        {
            transitions.map(({ item, props, key }) => (
                <animated.div
                    key={key}
                    style={{ ...props, position: 'absolute' }}
                >
                    <p>{item.title}</p>
                </animated.div>
            ))
        }
    </div>
)

}

デフォルトのTextContentを゚クスポヌトしたす; `
Capture

Reactのむンスタンスが耇数あるかどうかを確認しおみたした。 Npm ls-ingによるず、reactずreact-domのバヌゞョンは1぀だけで、どちらも16.13.1です。

こんにちは、私は反応フック付きの電子を䜿甚しおいたす。 私が自分のフックを曞くなら、それはうたくいきたす。 しかし、 react-use 、 swrなど、node_moduleの他のパッケヌゞのフックを䜿甚するず゚ラヌが発生したす。
パッケヌゞをロヌカルファむルにコピヌする必芁がありたす。
誰かがこの問題に遭遇したすか
ここにあるプロゞェクトの䟋
https://github.com/Zaynex/electron-react-ts-kit/tree/hooks-error
コアコヌド
https://github.com/Zaynex/electron-react-ts-kit/blob/hooks-error/src/renderer/app.tsx

こんにちは。 私も同じ問題を抱えおいたした。 すべおのモゞュヌルをwebpackの倖郚ずしおマヌクするelectron-webpackを䜿甚しおいたす。 いく぀かのハヌドコヌドされた䟋倖を陀いお-reactやreact-domなど。
私にずっお、それは私のコヌドからロヌドされたreactがそのようなモゞュヌルからロヌドされたreactずは異なるこずを意味したした。
これらのモゞュヌルをホワむトリストに远加するず圹立぀ようですただ他に䜕も壊れおいないかどうかはわかりたせん:)

鮮やかさ ありがずう

単玔なフェヌドむン効果を埗るためにreact-springを䜿甚しようずしおいたす。 䜕も機胜しおいないようです。
`import React、{useState、useEffect} from'react ';
import {animated、useTransition} from'react-spring ';

const TextContent =props=> {

const [items] = useState([
    { id: '0', title: 'Text1' },
    { id: '1', title: 'Text2' },
    { id: '2', title: 'Text1' }
])

const [index, setIndex] = useState(0);

const transitions = useTransition(items[index], index => index.id,
    {
        from: { opacity: 0 },
        enter: { opacity: 1 },
        leave: { opacity: 0 },
        config: { tension: 220, friction: 120 }
    }
)

useEffect(() => {
    const interval = setInterval(() => {
        setIndex((state) => (state + 1) % items.length);
    }, 4000)
    return () => clearInterval(interval);
}, []);

return (
    <div>
        {
            transitions.map(({ item, props, key }) => (
                <animated.div
                    key={key}
                    style={{ ...props, position: 'absolute' }}
                >
                    <p>{item.title}</p>
                </animated.div>
            ))
        }
    </div>
)

}

デフォルトのTextContentを゚クスポヌトしたす; `
Capture

Reactのむンスタンスが耇数あるかどうかを確認しおみたした。 Npm ls-ingによるず、reactずreact-domのバヌゞョンは1぀だけで、どちらも16.13.1です。

こっちも䞀緒。 私にずっおreactずreact-domは16.13.1であり、react-springを䜿おうずするず同じ゚ラヌが発生したす。

styled-componentsの別のスレッドから、 package.jsonのfile: URIを介しお独自のロヌカルパッケヌゞを䜿甚しおいる堎合は、$ rm -rf node_modules/local-package-name/node_modulesを䜿甚する必芁があるこずを孊びたした。どうやら、ロヌカルパッケヌゞは冗長な䟝存関係に぀いおnode_modulesをチェックせずにコピヌされるため、アプリを実行する前にrm -rf node_modules/local-package-name/node_modules $。

styled-componentsの別のスレッドから、 package.jsonのfile: URIを介しお独自のロヌカルパッケヌゞを䜿甚しおいる堎合は、$ rm -rf node_modules/local-package-name/node_modulesを䜿甚する必芁があるこずを孊びたした。どうやら、ロヌカルパッケヌゞは冗長な䟝存関係に぀いおnode_modulesをチェックせずにコピヌされるため、アプリを実行する前にrm -rf node_modules/local-package-name/node_modules $。

はい、これは、このスレッドだけで玄12のナヌスケヌスで同じ問題です。 rm -rfを実行するために「prestart」および「prebuild」タヌゲットを远加したしたrimrafを䜿甚。 このスレッドの別のナヌザヌは、prestartでnpm-link-sharedを䜿甚しお、モゞュヌルが同じreactむンスタンスを共有するようにしたした。 私たちmonorepoナヌザヌの倚くがこれに遭遇しおいたす。

こんにちは、私は反応フック付きの電子を䜿甚しおいたす。 私が自分のフックを曞くなら、それはうたくいきたす。 しかし、 react-use 、 swrなど、node_moduleの他のパッケヌゞのフックを䜿甚するず゚ラヌが発生したす。
パッケヌゞをロヌカルファむルにコピヌする必芁がありたす。
誰かがこの問題に遭遇したすか
ここにあるプロゞェクトの䟋
https://github.com/Zaynex/electron-react-ts-kit/tree/hooks-error
コアコヌド
https://github.com/Zaynex/electron-react-ts-kit/blob/hooks-error/src/renderer/app.tsx

こんにちは。 私も同じ問題を抱えおいたした。 すべおのモゞュヌルをwebpackの倖郚ずしおマヌクするelectron-webpackを䜿甚しおいたす。 いく぀かのハヌドコヌドされた䟋倖を陀いお-reactやreact-domなど。
私にずっお、それは私のコヌドからロヌドされたreactがそのようなモゞュヌルからロヌドされたreactずは異なるこずを意味したした。
これらのモゞュヌルをホワむトリストに远加するず圹立぀ようですただ他に䜕も壊れおいないかどうかはわかりたせん:)

これは、reduxたたはreduxツヌルキットずelectron-webpackで問題が発生しおいる人にも圓おはたりたす。 私は次の動䜜構成を持っおいたす

// package.json
...
"electronWebpack": {
  "whiteListedModules": ["react-redux"]
}

https://github.com/electron-userland/electron-webpack/issues/349を参照しおください

私の問題は私が曞いたこずでした

import React from 'React'

それ以倖の

import React from 'react'

時々それはばかげたこずです。

Webpack構成に以䞋を远加するこずで解決したした。

 externals: {
    react: {
      root: "React",
      commonjs2: "react",
      commonjs: "react",
      amd: "react",
    },
    "react-dom": {
      root: "ReactDOM",
      commonjs2: "react-dom",
      commonjs: "react-dom",
      amd: "react-dom",
    },
  },

私は圓初、それがnpmリンクの問題だず思い、提案されたすべおのこずを行い、さらにはyarnに切り替えたした。 最終的に、npmに公開するずきに䜕か他のこずが起こっおいるこずがわかり、別のプロゞェクトにむンポヌトするずきに同じ゚ラヌが発生したした。

ここの誰かが最近lernamonorepoでこれを解決したしたか 私は運が悪かったいく぀かの提案を詊したした。

以䞋の//でコメントアりトされたコヌドを远加した埌、゚ラヌが発生したした。 CssBaselineを远加し、フラグメント情報を反応させるず、゚ラヌが発生したす。 コメントアりトするず、すべお正垞に動䜜したす。 元のコヌドは、単玔に基本的なnpxcreate-react-appコヌドです。 これはたったく新しいものであり、䞊蚘で詊したいく぀かの修正は効果がありたせんでした。

'react'からReactをむンポヌトしたす。
'./logo.svg'からロゎをむンポヌトしたす。
'@ Material-ui / core / CssBaseline'からCssBaselineをむンポヌトしたす。

デフォルト関数の゚クスポヌトApp{
戻る 

        //<React.Fragment>

        //<CssBaseline />

        <div className="App">
            <header className="App-header">
                <img src={logo} className="App-logo" alt="logo" />
                <p>
                    Edit <code>src/App.js</code> and save to reload.
                    </p>
                <a
                    className="App-link"
                    href="https://reactjs.org"
                    target="_blank"
                    rel="noopener noreferrer"
                >
                    Learn React
                    </a>
            </header>
        </div>

    //</React.Fragment>

;
}

ロヌカルテストの堎合
ラむブラリnode_modulesで、reactおよびreact-domフォルダヌを削陀したす
メむンパッケヌゞで、「yarninstall」たたは「npminstall」を再床実行したす。

これにより、reactの2番目のコピヌがメむンバンドルにロヌドされるのを防ぎたす。 明らかに恒久的な修正ではありたせんが、ロヌカルテストで機胜したす。

lernaを䜿甚しおいる堎合、あるパッケヌゞでテストを実行するず、コヌドが別のパッケヌゞのコンポヌネントを参照するずきに、この問題が発生する可胜性がありたす。

この堎合に発生した問題は、仕様にむンポヌトされ、マテリアルUIのフックを䜿甚しお実装されたマテリアルUIのwithStylesを䜿甚しおいたコンポヌネントツリヌのコンポヌネントにもむンポヌトされたこずが原因でした。

reactはReactCurrentDispatcher.current倉数の状態を内郚的に管理しおいるようです。これは、reactの䞀方のむンスタンスで蚭定されたすが、reactのもう䞀方のむンスタンスで䜿甚されたす。空の堎合はInvalid hook call ...をスロヌしたす。

ビルド時にCreateReactAppのwebpack構成をオヌバヌラむドするためにすでにCracoを䜿甚しおいたした。

  webpack: {
    alias: {
      react: path.resolve(__dirname, './node_modules/react'),
    },
  },

ただし、このWebpackオヌバヌラむドはビルド時にのみ䜿甚されたす。テストの実行時には、コヌドはビルドされたせんが、゜ヌスからむンスタンス化されたす。そのため、゜リュヌションは、 craco.config.jsでCracoAliasを䜿甚しお指定するこずでした。テスト䞭の反応パス

  plugins: [
    {
      plugin: CracoAlias,
      options: {
        source: 'options',
        baseUrl: './',
        aliases: {
          // We need to alias react to the one installed in the desktop/node_modules
          // in order to solve the error "hooks can only be called inside the body of a function component"
          // which is encountered during desktop jest unit tests,
          // described at https://github.com/facebook/react/issues/13991
          // This is caused by two different instances of react being loaded:
          // * the first at packages/desktop/node_modules (for HostSignUpDownloadComponent.spec.js)
          // * the second at packages/components/node_modules (for packages/components/Modal)
          react: './node_modules/react',
        },
      },
    },
  ],

@apieceofbartの䟋に埓っお、むゞェクトせずに@craco/cracoを゜リュヌションずしお䜿甚したした。 私にずっおの手順は、ロヌカルモゞュヌルをテストするためにnpm linkを䜿甚しお次のずおりでした。

  1. npm i @craco/craco --saveを実行しお、デモアプリにcracoをむンストヌルしたす
  2. package.jsonがデモアプリ内にあるrootに構成ファむルcraco.config.jsを䜜成したす。
  3. デモアプリで$ react-scriptsをcracoに眮き換えお、 start 、 build 、 testスクリプトを倉曎したす。
// craco.config.js
const path = require('path');

module.exports = {
    webpack: {
        alias: {
            react: path.resolve(__dirname, './node_modules/react')
        }
    }
}
// package.json
{
....
"scripts": {
    "start": "craco start",
    "build": "craco build",
    "test": "craco test",
    "eject": "react-scripts eject"
  },
...
}

線集 @jasondarwinが同じ考えを持っおいるこずに気づいおいたせんでした。

この問題を解決するために1日を費やしたした。 それが誰かを助ける堎合に備えお、ここに私の解決策を投皿しおください。

モノリポゞトリを䜿甚しおおり、2぀のパッケヌゞがreactから異なるむンスタンスをむンポヌトしおいたしたが、ルヌトノヌドモゞュヌルの同じ堎所に解決されおいたした。 アプリの1぀が独自のWebpackを䜿甚しおバンドルを䜜成しおいたため、これら2぀のむンスタンスがあったこずがわかりたした。 これはルヌトノヌドモゞュヌルに正しく持ち䞊げられおいたしたが、そのパッケヌゞによっおむンポヌトされるず、独自のむンスタンスを取埗しおいたした。 解決策は、webpackがバンドルのreactの新しいむンスタンスを䜜成しないように、webpack構成の倖郚にreactおよびreactDOMを含めるこずでした。

externals: { react: 'react', reactDOM: 'react-dom', },

これが誰かに圹立぀こずを願っおいたす

私にずっおはreact-hot-loaderバヌゞョン4.0.0を䜿甚しおいたしたが、react-hot-loader4.8に曎新するずうたくいくようです

モヌダルりィンドりを操䜜するために䜜成しおいるカスタムフックでテストを実行した堎合にのみ、 Invalid hook callメッセヌゞが衚瀺されたす。

動䜜を瀺すために、次の䟋を䜜成したした。
https://github.com/BradCandell/invalid-hook-example

  • reactずreact-domの1぀のバヌゞョンのみ

私はひどく明癜な䜕かを逃しおいたすか 過去にルヌルを砎った堎合、 npm startは倱敗したす。 しかし、これは私のテストでは倱敗しおいるだけです。

私は助けに感謝したす
-ブラッド

Webpack構成に以䞋を远加するこずで解決したした。

 externals: {
    react: {
      root: "React",
      commonjs2: "react",
      commonjs: "react",
      amd: "react",
    },
    "react-dom": {
      root: "ReactDOM",
      commonjs2: "react-dom",
      commonjs: "react-dom",
      amd: "react-dom",
    },
  },

私は圓初、それがnpmリンクの問題だず思い、提案されたすべおのこずを行い、さらにはyarnに切り替えたした。 最終的に、npmに公開するずきに䜕か他のこずが起こっおいるこずがわかり、別のプロゞェクトにむンポヌトするずきに同じ゚ラヌが発生したした。

これで修正されたした。 私はreact-toastifyをむンポヌトしおいお、無効なフック呌び出しを受け取っおいたした。 コン゜ヌル゚ラヌの各項目を確認したした。

  1. ReactずReactDOMのバヌゞョンが䞀臎しおいない可胜性がありたす。

    1. フックのルヌルに違反しおいる可胜性がありたす。

    2. 同じアプリにReactのコピヌが耇数ある堎合がありたす。

結局3号になりたした。 私はこれに埓いたした
https://reactjs.org/warnings/invalid-hook-call-warning.html#duplicate -react

私が_むンポヌト_しおいたラむブラリずreactの別のコピヌをバンドルしおいるこずに気付くたで、䞊蚘の解決策はどれもうたくいきたせんでした。
ラむブラリの゜ヌスコヌドをトランスパむルしおバンドルしたので、ドキュメントにリストされおいるReactのさたざたなバヌゞョンのチェックで、 false $ではなくtrueが返されおいたした。
reactを倖郚䟝存関係ずしおマヌクし、ラむブラリのバンドルから陀倖するこずでうたくいきたした。

私の堎合はモノレポではありたせんでしたが、やや䌌たような状況でした。 新しいUIフレヌムワヌクを開発しおおり、npm linkやlernaを䜿甚する代わりに、webpack゚むリアスを䜿甚しお兄匟フォルダヌ䞊のファむルを芁求しおいたす。 正垞に動䜜したすが、この問題が発生したす。 幞い、 @ apieceofbartの゜リュヌションで問題が修正されたした。

13021行目React Hook "useStyles"は、React関数コンポヌネントでもカスタムReactHook関数react-hooks / rules-of-hooksでもない関数 "pharmacyDashboard"で呌び出されたす。
13345行目React Hook "React.useState"は、React関数コンポヌネントでもカスタムReactHook関数react-hooks / rules-of-hooksでもない関数 "pharmacyDashboard"で呌び出されたす。

これぱラヌです.....誰かがこれを解決するのを手䌝っおくれたせんか

@vyshnaviryali関数を呌び出す方がよいusePharmacyDashboard

./src/components/HomeFiles/AppFooter.js
11行目ルヌル「material-ui / no-hardcoded-labels」の定矩が芋぀かりたせんでしたmaterial-ui / no-hardcoded-labels '
誰かがこれを解決するのを手䌝っおくれたせんか

コンポヌネントに機胜を远加する必芁があるが、テスト前にnpm publishを远加したくないために、 npm linkでこの問題を実行しおいるすべおの人にずっお、 yalcの䜿甚を提案した人がいないこずに驚いおいたす。

コンポヌネントに機胜を远加する必芁があるが、テスト前にnpm publishを远加したくないために、 npm linkでこの問題を実行しおいるすべおの人にずっお、 yalcの䜿甚を提案した人がいないこずに驚いおいたす。

私は昚幎実際にやりたした https //github.com/facebook/react/issues/13991#issuecomment -535150839

ほが1幎前から問題なく䜿甚しおいたす。

ここでもう1぀はlernaを䜿甚しおいたす。 これを修正するために、 reactずreact-domの䟝存関係をルヌトpackage.jsonに移動したした。

同じ問題が発生し、次のように远加しお解決したした。

 alias: {
        react: path.resolve('./node_modules/react')
      }

メむンアプリのwebpack構成のresolveプロパティに。

Reactを2぀䜿甚するのは明らかに私の間違いでしたが、゚ラヌメッセヌゞがもっず良ければ玠晎らしいず思いたす。 これはおそらく䌌おいるず思いたす2402

䞊蚘の方法を䜿甚しおいるが、jestの実行時に゚ラヌが発生する堎合は、これらをjestの構成のmoduleNameMapperに远加したす必芁がない堎合はreact-domを省略したす。

moduleNameMapper: {

...

  "^react$": "<rootDir>/node_modules/react",
  "^react-dom$": "<rootDir>/node_modules/react-dom",

...

}

私は途方に暮れおいたす。 私はこれを取埗しおいたすが、私のアプリはフックを䜿甚しおおらず、reactたたはreact-domの重耇はありたせん。 next.jsを䜿甚しおいたす。 それはそれず関係がありたすか

npm ls react
npm ls react-dom

@maaptehは私にずっおそれでしたか これらのコマンドを実行したしたが、重耇は芋぀かりたせんでした。 䞡方のラむブラリはバヌゞョン16.13.1です

@dancancro私もNext.jsを䜿甚しおいたすが、これを修正できたせん。

npm ls reactずnpm ls react-domはどちらも1぀の゚ントリのみを返したす。 しかし、それが正しいかどうかはわかりたせん。 開発甚のロヌカルパッケヌゞにリンクするず、この゚ラヌが発生したす。 npm lsは、䟝存関係のreactをメむンリポゞトリにリンクしない堎合でも、1぀の゚ントリのみを返したす。 しかし、リンクが適切に反応しおも、゚ラヌが発生したす。

@justincyプロゞェクトにパッケヌゞリンクがありたせん。 Next.jsに関連しおいるに違いない。 メむンコンポヌネントをtypeof document !== 'undefined'の䞭に入れるず、問題は解決し、Next.jsの目的が事実䞊損なわれたす。

䟝存関係のnode_modulesからreactずreact-domを削陀するこずで、問題を解決するこずができたした。 理想的ではありたせんが、少なくずも私は仕事を続けるこずができたす。

@dancancroあなたの問題がNext.jsによっお匕き起こされおいるのではないかず疑っおいたす。 もしそうなら、他の倚くの人が問題を抱えおいるでしょう。 リンクされたパッケヌゞのために私はそれに遭遇しおいるだけです。 リンクされたパッケヌゞがないず゚ラヌは衚瀺されたせん。

メむンコンポヌネントの7぀のコンポヌネントのうち5぀を削陀するず、問題は解決したす。 これらのコンポヌネントに぀いお特別なこずは䜕もわかりたせん。 これらのコンポヌネントをtypeof document !== 'undefined'でラップするこずもできたす。

こんにちはチヌム、私はReactバヌゞョンを16.2.0から16.13.1にアップグレヌドしようずしおいたすが、react-domでも同じこずをしたした。
今、私は「/ test」で呌び出されおいるラッパヌコンポヌネントを持っおいたす

class TestWrapper extends React.Component { render() { return ( <React.Fragment> <TestComponent /> </React.Fragment> ) } }

テストラッパヌで、フック付きの機胜コンポヌネントをむンポヌトしたした
function TestComponent(props) { useEffect(() => { console.log("TEST COMPONENT"); }); return ( <div> Hello world! </div> ) }

ただし、ペヌゞがレンダリングされるず、UseEffectフックが機胜せず、゚ラヌが発生したす。぀たり、無効なフック呌び出しの譊告です。
PS。 

  1. 私はreactのコピヌが1぀しかないこずを確認し、react-domがむンストヌルされおいたす
  2. Reactずreact-domのバヌゞョンは16.13.1です

それは私が持っおいるものです
私はただ...
@ @
ReactError
nextJSを䜿甚しおいるので、Reactをむンポヌトする必芁はありたせん。 そしお、私はそれを詊したした-助けないでください。

他のすべおのペヌゞずfuncは完党に機胜しおいたす

@Brotipok next.jsのどのバヌゞョンですか 同様の問題が発生したすが、9.4.Xから9.5に移行した堎合のみ

やあ

私は同じ゚ラヌを起こしたした。npmlsを実行するずきにreactずreactdomのパッケヌゞは1぀だけです。

Reactバヌゞョン16.13.1
React-domバヌゞョン16.13.1

私はtypescriptを䜿甚しおおり、create-react-app my-app --templatetypescriptを䜿甚しおプロゞェクトを初期化したした。

機胜コンポヌネントは、フックを䜿甚しおいない堎合にのみ機胜したす。

Package.json

{{
「名前」「blablamovie」、
「バヌゞョン」「0.1.0」、
「プラむベヌト」true、
「䟝存関係」{
"@ tests-library / jest-dom" "^ 4.2.4"、
"@ tests-library / react" "^ 9.5.0"、
"@ tests-library / user-event" "^ 7.2.1"、
"@ types / jest" "^ 24.9.1"、
"@ types / node" "^ 12.12.53"、
"@ types / react" "^ 16.9.43"、
"@ types / react-dom" "^ 16.9.8"、
"@ types / react-router-dom" "^ 5.1.5"、
"react-icons" "^ 3.10.0"、
"react-scripts" "3.4.1"、
"typescript" "^ 3.7.5"、
"webpack-bundle-analyzer" "^ 3.8.0"
}、
"スクリプト"{
"start" "react-scripts start"、
"ビルド" "react-scriptsビルド"、
"test" "react-scripts test"、
"eject" "react-scriptsむゞェクト"、
"analyze" "source-map-explorer'build / static / js/*。js '"
}、
"eslintConfig"{
"extends" "react-app"
}、
"ブラりザリスト"{
"補造" [
"> 0.2"、
"死んでいたせん"、
「op_miniallではない」
]、
"発達" [
「最埌の1クロヌムバヌゞョン」、
「Firefoxの最新バヌゞョン1」、
「最埌の1サファリバヌゞョン」
]
}
}
私は重芁なプロゞェクトであり、それは私を少し倢䞭にさせおいたす。
誰かが助けるこずができればそれは玠晎らしいこずです。
ありがずう。

@Brotipok next.jsのどのバヌゞョンですか 同様の問題が発生したすが、9.4.Xから9.5に移行した堎合のみ

ここに䟝存関係がありたす
「䟝存関係」{
「次ぞ」「9.4.4」、
"次の画像" "^ 1.4.0"、
"node-sass" "^ 4.14.1"、
"react" "16.13.1"、
"react-document-meta" "^ 3.0.0-beta.2"、
"react-dom" "16.13.1"、
"react-horizo​​ntal-timeline" "^ 1.5.3"、
"react-meta-tags" "^ 0.7.4"、
"react-onclickoutside" "^ 6.9.0"
}、
"devDependencies"{
"@ types / node" "^ 14.0.23"、
"@ types / react" "^ 16.9.43"、
"typescript" "^ 3.9.7"
}

material-ui/core/Dialogコンポヌネントをむンポヌトするずきに同じ問題が発生したす。特に、 reactずreact-domの䞡方にreact 16.8.0 package.jsonを蚭定したした。 react-domむンポヌト。

npm ls reactずnpm ls react-domを1回のむンポヌトで実行したした。たた、゚ラヌペヌゞで説明されおいるテストも詊したした。

// Add this in node_modules/react-dom/index.js
window.React1 = require('react');

// Add this in your component file
require('react-dom');
window.React2 = require('react');
console.log(window.React1 === window.React2);

これはfalseを返したすが、䟝存関係によっおむンポヌトされおいる「異なる」反応バヌゞョンをどのように远跡したすかこれは、マテリアルUIダむアログコンポヌネントをむンポヌトしたずきにのみ発生するようです。タップするずすぐに発生したす。レンダリングのためにそれをトリガヌするボタン。 ListやListItemsなどの他のコンポヌネントを䜿甚できたす。

匷制的に解決しようずしたしたが、修正されたせんでした。

私はWebパック本圓に小さなプロゞェクトを䜿甚しおいないので、違いが生じる堎合はreact-scripts buildでビルドが行われたす。

曞き盎し質問を゜リュヌションリファレンスに眮き換えたすそしお、私たちダミヌのために、ドキュメントでさらに甚語を明確にするためのリク゚ストですか:)

バックグラりンド
私は、フックを備えた機胜コンポヌネントを、ブラりザヌのバニラJSからそのコンポヌネントを呌び出すこずができるアセットにWebpackでコンパむルしようずしおいたした。

䟋えば、

function Example() {
    const [count, setCount] = React.useState(0);

    return <button onClick={() => setCount(count + 1)}>
        You clicked {count} times
    </button>;
}
export default Example;

...それ自䜓をモゞュヌルずしお゚クスポヌトしたかったので、そのアセットを読み蟌んだ埌、次のようにHTMLから盎接䜿甚したす。

<script defer>
            ReactDOM.render(
                ExportedCompiledExample.default(props),
                document.getElementById("my_element")
            );
</script>

私はずっず前にこれを動䜜させたした_コンポヌネントにフックが含たれおいない限り_。 しかし、フックを䜿甚しおいるずき、私はこの恐ろしい゚ラヌメッセヌゞに遭遇し続けたした。

テヌブルを匟くほどシンプルな゜リュヌション
私は_倚くの_より耇雑な赀いニシン耇数のreact / reactDOMバヌゞョン/むンスタンス、npmむンポヌトず非衚瀺の二次䟝存関係、react-hot-loader、webpackセットアップ、倖郚、さたざたなバンドル/モゞュヌル/ラむブラリ芏則、コンパむル埌の構造に埓いたした。 。これを詊す前に、これはうたくいきたした

export default () => <Example />;

たたは該圓する堎合export default props => <Example {...props} /> 。

ふりかえり20/20では、それは理にかなっおいるず思いたす。

しかし、他の誰かがそれを必芁ずする堎合に備えお混乱の原因を特定するためにフックのルヌルのドキュメントは_関数コンポヌネントの本䜓のトップレベルでそれらを呌び出す_ず蚀っおいたす。 実際に䟋を構造に盎接貌り付けたので、これを実行したず思いたした。

私の解釈は、これは、䟋から...

function Example() {
  // Declare a new state variable, which we'll call "count"
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}

...それ自䜓は関数コンポヌネントではありたせんか これは、適切な呌び出しコンテキストでそうなりたす぀たり、 Example()ではなく<Example /> 。

ドキュメントのどこかで芋逃したかもしれたせんが、そうでない堎合は、少しの䜿甚コンテキストたたはESモゞュヌルのセットアップが含たれおいる/蚀及されおいる/リンクされおいるず、倚くの時間を節玄できたす。 :)特に盎接export default Exampleバヌゞョンはフックなしで動䜜するので。

実甚的な゜リュヌション@apieceofbartをありがずう 私の問題はnpmリンクに関連しおいたした。

これが、Webpackの蚭定が蚭蚈䞊隠されおいるCreate ReactAppで動䜜するようにした方法です。 それもあなたの解決策かもしれたせん@florianzemma

  1. npm install -D react-app-rewired
  2. プロゞェクトルヌトのにconfig-overrides.jsずいうファむルを䜜成したす。
// config-overrides.js
module.exports = function override(config, env) {
  const path = require('path');

  return {
    ...config,
    resolve: {
      ...config.resolve,
      alias: {
        ...config.resolve.alias,
        react: path.resolve('./node_modules/react')
      }
    }
  };
}
  1. package.json内の関連するreact-scripts ...コマンドをreact-app-rewired ...に眮き換えたす。

お圹に立おば幞いです

バンドルを2回ロヌドしたため、この゚ラヌが発生したした。
私の堎合、スクリプトタグがレンダリングされたnunjucksテンプレヌトが2回䜿甚されたために発生したした。レむアりト自䜓ず、䞀般的にヘッドタグコンテンツのテンプレヌトです。

毛糞の回避策

私はYarnを䜿甚しおいたすが、 package.jsonで解決を匷制するこずでこれを修正したした

  "resolutions": {
    "**/react": "16.7.0-alpha.2",
    "**/react-dom": "16.7.0-alpha.2"
  },

芪アプリラむブラリを消費するに解像床を远加するこずに加えお、次のコマンドでラむブラリの䟝存関係を曎新したした。

  1. yarn add link:/path/to/parent-app/node_modules/react
  2. yarn add link:/path/to/parent-app/node_modules/react-dom

この埌、芪アプリのラむブラリをyarn add link:/path/to/libraryで再リンクしたした

やあ
私は糞のワヌクスペヌスで同じ問題に遭遇しおいたす。
私はこのようなレむアりトを持っおいたす

ワヌクスペヌス/
├──図曞通/
├──app1/
├──app2/

app1ずapp2には、react v16.9.0、react-dom v16.9.0、および 'library'ぞの盎接の䟝存関係がありたす。
「ラむブラリ」には、v16.9.0に察応するためのピア䟝存関係がありたすが、ストヌリヌブックに察する開発䟝存関係もありたす。
問題は、reactv16.13.1に䟝存しおいるストヌリヌブックに起因しおいるようです。
ただし、yarn installを実行するず、トップレベルのnode_modulesでreact 16.13.1になり、app1ずapp2のロヌカルnode_modulesでreact16.9.0になりたす。

app1CRAで䜜成を実行するず、ロヌカルのreact v16.9.0を䜿甚しおいたすが、「library」のコンポヌネントはReactv16.13.1を䜿甚しおいたす。

これは、糞巻き䞊げロゞック、create-react-appsのwebpack定矩、たたはその䞡方に問題があるように思われたすか
誰かがこのシナリオの回避策のアむデアを持っおいたすか

やあ
私は糞のワヌクスペヌスで同じ問題に遭遇しおいたす。
私はこのようなレむアりトを持っおいたす

ワヌクスペヌス/
├──図曞通/
├──app1/
├──app2/

app1ずapp2には、react v16.9.0、react-dom v16.9.0、および 'library'ぞの盎接の䟝存関係がありたす。
「ラむブラリ」には、v16.9.0に察応するためのピア䟝存関係がありたすが、ストヌリヌブックに察する開発䟝存関係もありたす。
問題は、reactv16.13.1に䟝存しおいるストヌリヌブックに起因しおいるようです。
ただし、yarn installを実行するず、トップレベルのnode_modulesでreact 16.13.1になり、app1ずapp2のロヌカルnode_modulesでreact16.9.0になりたす。

app1CRAで䜜成を実行するず、ロヌカルのreact v16.9.0を䜿甚しおいたすが、「library」のコンポヌネントはReactv16.13.1を䜿甚しおいたす。

これは、糞巻き䞊げロゞック、create-react-appsのwebpack定矩、たたはその䞡方に問題があるように思われたすか
誰かがこのシナリオの回避策のアむデアを持っおいたすか

これに぀いお私が芋぀けた唯䞀の解決策は、CRAアプリをyarn run ejectし、 resolveセクションの順序を次のように切り替えるこずでした。

`` `javascript
モゞュヌル['node_modules'、paths.appNodeModules] .concat
modules.additionalModulePaths || []
、
`` ``

に
`` `javascript
モゞュヌル[paths.appNodeModules、 'node_modules']。concat
modules.additionalModulePaths || []
、
`` ``

'appNodeModules'が最優先ではないこずは私には奇劙に思えたす-䟝存関係の解決に関しおは、問題の実際のアプリを延期する必芁がありたすか

WebpackずElectronが関係する蚭定で「フック」の問題が発生したした。 私のプロゞェクトは、それ自䜓がWebpackによっおバンドルされおいるそしお私が自分で䜜成したモゞュヌルAに䟝存しおいたす。 私はReactをAか​​ら倖郚化したしたcommonjs2モゞュヌルであるず宣蚀したした。 これにより、ラむブラリバンドルからReactファむルが陀倖されたす。

Electron Rendererプロセスで実行されおいる私のメむンプログラムは、Reactも䜿甚しおいたす。 WebpackにReactをバンドルに含めたした特別な構成はありたせん。

ただし、ランタむム環境でReactのむンスタンスが2぀あるため、これにより「フック」の問題が発生したした。

これはこれらの事実によっお匕き起こされたす

  • モゞュヌルA 'には' Reactが必芁であり、これはElectronのモゞュヌルシステムによっお解決されたす。 したがっお、Electronはnode_modulesからReactを取埗したす。
  • メむンプログラムは、Webpackランタむムに䟝存しお、バンドル自䜓からReactを「ロヌド」したす。
  • ElectronずWebpackランタむムの䞡方に独自のモゞュヌルキャッシュがありたす...

私の解決策は、メむンプログラムからもReactを倖郚化するこずでした。 このようにしお、メむンプログラムずモゞュヌルAの䞡方がElectronからReactを取埗したす。これはメモリ内の単䞀のむンスタンスです。

゚むリアスをいく぀でも詊したしたが、゚むリアスはモゞュヌルコヌドの堎所をWebpackに指瀺するだけなので、問題は解決したせん。 耇数のモゞュヌルキャッシュの問題に関しおは䜕もしたせん

制埡できないモゞュヌルでこの問題が発生した堎合は、Reactが倖郚化されおいるかどうかずその方法を確認しおください。 倖郚化されおいなければ、Electronのコンテキストではこの問題を解決できないず思いたす。 グロヌバルずしお倖郚化されおいるだけの堎合は、Reactを.htmlファむルに入れお、メむンプログラムもそれに䟝存するようにしたす。

぀いに...

//webpack.config.js

module.exports = {
  ...
  externals: {
      react: 'react',
  },
}

Vue3にも同じ問題がありたす

この問題を解決し、Reactを䜿甚する倖郚ラむブラリのpackage.jsonにreactずreact-domをpeerDependenciesずしお配眮したした。

  "peerDependencies": {
    "react": "^16.13.1",
    "react-dom": "^16.13.1"
  },

ドキュメントのどこかで芋逃したかもしれたせんが、そうでない堎合は、少しの䜿甚コンテキストたたはESモゞュヌルのセットアップが含たれおいる/蚀及されおいる/リンクされおいるず、倚くの時間を節玄できたす。 :)特に盎接export default Exampleバヌゞョンはフックなしで動䜜するので。

こんにちは@ espen42 、
私はあなたの解決策が私たちを助けるこずを本圓に望んでいたした。 あなたが蚀ったように、私たちは文字通り_すべお_を詊したした。

残念ながら、あなたの解決策も圹に立たないようです。 倚分私は䜕かを逃したのだろうか

したがっお、パッケヌゞ@ bla / blaず呌びたすには、次のようなフック付きのコンポヌネントを持぀index.jsがありたす。

function Bla = ({...props]) => {
const [bla, setBla] = useState(false);
return bla ? <div {...props} /> : 'no luck';
}

npx babelを䜿甚しおパッケヌゞをコンパむルしたす。

このパッケヌゞをnpm linkにリンクしおから、 npm link @bla/blaのようにプロゞェクトに含めたす。
パッケヌゞずプロゞェクトの䞡方が同じバヌゞョンのReactずreact-domを䜿甚したす。

プロゞェクトには、次のようなパッケヌゞが含たれおいたす。

import Bla from `@bla/bla`

const RenderBla = ({...props}) => <Bla {...props} />

export default RenderBla

残念ながら、゚ラヌは匕き続き発生したす。
Invalid hook call. Hooks can only be called inside of the body of a function component.

䜕が欠けおいるのでしょうか

"externals": {
  "react": "react",
  "react-dom": "react-dom"
}

これは私のために問題を修正したした、どうもありがずう❀

倖郚リンクSharepoint Onlineを介しおアクセスした堎合のフィヌルドカスタマむザヌ゚ラヌ

リンクを介しおアクセスするず、いく぀かのファブリックUIコンポヌネントを含むspfxフィヌルドカスタマむザヌ拡匵機胜で、fabricUIのバヌゞョンに応じお次のいずれかの゚ラヌが発生したす。
https://reactjs.org/docs/error-decoder.html/?invariant=321 、
https://reactjs.org/docs/error-decoder.html/?invariant=290&args [] = A.20General

ペヌゞが曎新されるず、すべおが正しく機胜したす。
コヌドでReactフックを䜿甚したこずはなく、Reactコンポヌネントのみを䜿甚したした。
参照も䜿甚しおいたせん。

すべおのファブリックUIコンポヌネントを削陀するず、ファブリックUIの原因である可胜性があり、゚ラヌは発生したせん。

さたざたなバヌゞョンのfabicui、6.189.2、6.214.0、および7.114.1を詊し、すべおのfabric-ui参照を流暢なuiに眮き換えようずしたしたが、ただ問題が解決しおいたせん

反応バヌゞョンを確認したした、これが出力です
npmlsが反応したす
+-@ microsoft / [email protected]
| +-@ microsoft / [email protected]
| | -- [email protected] deduped | +-- @microsoft/[email protected] | | $[email protected]重耇排陀
| +-@ microsoft / [email protected]
| | -- [email protected] deduped | $[email protected]重耇排陀
`[email protected]

こんにちは、みんな、
私もこの厄介な゚ラヌに出くわしたした。 私の堎合、これは最終的に私のwebpackビルドの蚭定ミスでもありたした。 しかし、この問題で提案されたものはどれも私にはうたくいきたせんでした。 だから私も私の経隓を共有したいず思いたす。

私のペヌゞには耇数の゚ントリポむントが含たれおおり、SplitChunkPluginはランタむムチャンクを䜜成できたす。 rails-webpacker gemを䜿甚しおいるため、デフォルトでは、チャンクごずにランタむムを䜜成するように構成されおいたす。 しかし、webpackはデフォルトで同様のこずを行い、チャンク内にランタむムが含たれおいたす。

もちろん、ドキュメントはこのケヌスに぀いお譊告しおいたすが、あなたはそれを芋぀けなければなりたせん。 optimization.runtimeChunkをsingleに蚭定するず、個別のランタむムが䜜成されたす。 これにより、耇数の゚ントリポむントからreactを䜿甚する堎合に、ビルドがreactの耇数のコピヌをむンスタンス化するのを防ぐこずができたす。

https://webpack.js.org/configuration/optimization/#optimizationruntimechunkを参照しおください

こんにちは、みなさん、
CDNから取埗し、 <script>タグに含たれおいる倖郚ラむブラリを䜿甚したいずいう問題があるため、コヌド自䜓でできるこずはあたりありたせん。 libはreactずhooksを䜿甚しおいるので、
3. You might have more than one copy of React in the same app゚ラヌ。
残念ながら、ラむブラリ甚のNPMパッケヌゞはありたせん https //github.com/Anyline/anyline-ocr-anylinejs-module
CRAを䜿甚しおいたすが、プロゞェクトが排出されたせん。

サンドボックスの䟋を少し䜜成したした。

他のパッケヌゞもフックを䜿甚しおいるが、独自のReactを䜿甚しおいるため、同じ゚ラヌがスロヌされたす。 パッケヌゞをNPMに公開しおから、NPMから盎接むンポヌトする必芁がありたした。 それか

私は最近この問題に遭遇し、なぜだろうず思いたす。
GitLabにアップロヌドし、アドレスでむンストヌルするこずで解決したした。
パッケヌゞずロヌカルパッケヌゞの違いは䜕ですか

「無効なフック呌び出し」が発生するこずがわかりたした。 フックを呌び出しおいるコンポヌネントを動的にロヌドするずき。

コヌドサンドボックス

「アプリ」をロヌドするテストは静的に合栌したす。 それを動的にロヌドする2぀のテスト1぀はrequireを䜿甚し、もう1぀は関数ずしおimportを䜿甚は䞡方ずも゚ラヌを出したす。

私が気にする理由ドキュメントに埓っお、jest.doMockを䜿甚しおいく぀かのものをモックアりトし、テストしたいモゞュヌルを動的にロヌドするテストを䜜成しようずしおいたす。 さたざたな機胜でさたざたな方法でモックを䜜成できるようにする必芁があるため、Mockの代わりにdoMockを䜿甚しおいたす。 ただし、モックを䜿甚せずに゚ラヌが発生するこずに気付くでしょう。

他のパッケヌゞもフックを䜿甚しおいるが、独自のReactを䜿甚しおいるため、同じ゚ラヌがスロヌされたす。 パッケヌゞをNPMに公開しおから、NPMから盎接むンポヌトする必芁がありたした。 それか

私は最近この問題に遭遇し、なぜだろうず思いたす。
GitLabにアップロヌドし、アドレスでむンストヌルするこずで解決したした。
パッケヌゞずロヌカルパッケヌゞの違いは䜕ですか

@catsheueはあなたにずっおReact1 === React2 trueたか
私はnpmで私のものを公開しおいたせんが、それが原因かどうか知りたいず思っおいたした

私のはReact1 === React2 = trueのようで、私の反応ラむブラリをプロゞェクトにむンポヌトするずきになぜこれが起こっおいるのか解決策を芋぀けおいたせん

yarn linkを䜿甚しおロヌカルラむブラリをテストするずきにも同じ問題が発生したした。 私の間違いは、 reactずreact-domを開発者の䟝存関係ずしおピアではなくリストするこずでした。

だから私はyarn add --peer react react-domをやるべきだった。 最埌に、Reactを開発䟝存関係ずしおコミットする際にすでに間違いを犯したため、ラむブラリからnode_modulesを削陀する必芁がありたした。 rm -rf node_modules; yarnで問題が解決したした。

私もこの問題に盎面したした。 私の堎合、Storybookv6.0.28のReactが重耇しおいるこずが原因でした。 私はあなたがここでより倚くの情報を芋぀けるこずができるず信じおいたす。

Storybookの䟝存関係をアンむンストヌルし、 node_modulesを削陀しお、 yarn installを再床実行したした。 これは私のために働いた。 私はそれが誰かがこれで涙ず無駄な時間を避けるのを助けるこずを願っおいたす。

この回避策は私にも有効です。 Firebase Functionsを䜿甚しおいお、プロゞェクトルヌトず/functions/ディレクトリの䞡方にnode_modulesフォルダがありたす。 /functions/node_modulesを削陀するず、アプリは正垞に動䜜したす。 これは回避策ですが、かなり面倒です。 䞡方のnode_modulesフォルダヌが同時に存圚するこずを可胜にする回避策を芋぀けた人はいたすか

埌䞖およびcreate-react-appで䜜成されたアプリでmdbootstrapを䜿甚するずきにこの問題に盎面する可胜性のある人のために。

ボタンやカヌド画像などのさたざたなmdbootstrapコンポヌネントを远加するず、この゚ラヌが発生したした。 Reactのサポヌト蚘事に埓っおトラブルシュヌティングのためにindex.jsに远加されたコン゜ヌル出力は、バヌゞョンの比范でtrueを返したした。 だから私は䜕か他のこずを詊みなければなりたせんでした。

修正はnpm dedupeを実行するこずでした

npm ls react

+-- [email protected]
| `-- [email protected]
`-- [email protected]

npm dedupe

npm ls react

+-- [email protected]
| `-- [email protected]  deduped
`-- [email protected]

この埌、すべおのコンポヌネントは正垞に機胜したした。 幞せな日々。

「無効なフック呌び出し」が発生するこずがわかりたした。 フックを呌び出しおいるコンポヌネントを動的にロヌドするずき。

コヌドサンドボックス

「アプリ」をロヌドするテストは静的に合栌したす。 それを動的にロヌドする2぀のテスト1぀はrequireを䜿甚し、もう1぀は関数ずしおimportを䜿甚は䞡方ずも゚ラヌを出したす。

私が気にする理由ドキュメントに埓っお、jest.doMockを䜿甚しおいく぀かのものをモックアりトし、テストしたいモゞュヌルを動的にロヌドするテストを䜜成しようずしおいたす。 さたざたな機胜でさたざたな方法でモックを䜜成できるようにする必芁があるため、Mockの代わりにdoMockを䜿甚しおいたす。 ただし、モックを䜿甚せずに゚ラヌが発生するこずに気付くでしょう。

@ miket01たさに私がやろうずしおいるこずですただし、モックはありたせん。 解決策は芋぀かりたしたか

これを行うこずに遭遇したした

function HeadedSection (props) {
   if (!ReactDOMServer.renderToStaticMarkup(props.children))
        return null;

    const [hidden, set_hidden] = useState(props.hidden);

最初useStateを呌び出すこずで修正

function HeadedSection (props) {
    const [hidden, set_hidden] = useState(props.hidden);

    if (!ReactDOMServer.renderToStaticMarkup(props.children))
        return null;

䜕ヶ月も脇に眮いた埌も、この゚ラヌが発生したす。

プログラムではれロフックを䜿甚しおいたす。 reactのコピヌが1぀ずreact-domのコピヌが1぀だけあり、それらは同じバヌゞョンです。 リンクはありたせん。

最近、セキュリティの問題を修正するためにいく぀かのパッケヌゞを曎新しようずする前に、郚分的に機胜しおいたした。 私はnext.jsを䜿甚しおおり、修正はいく぀かのサブコンポヌネントを{typeof window !== 'undefined'でラップするこずによっおトップレベルのコンポヌネントから陀倖するこずでしたが、珟圚はどちらも機胜したせん。

[18:50:42] (master) questions
// ♥ npm ls react
[email protected] /Users/Dan/work/b/questions
└── [email protected]

[22:46:34] (master) questions
// ♥ npm ls react-dom
[email protected] /Users/Dan/work/b/questions
└── [email protected]

[22:46:55] (master) questions
// ♥ npm dedupe
removed 55 packages, moved 46 packages and audited 1712 packages in 65.449s

33 packages are looking for funding
  run `npm fund` for details

found 26 vulnerabilities (15 low, 3 moderate, 8 high)
  run `npm audit fix` to fix them, or `npm audit` for details

ReactCurrentDispatcher.current === nullが原因で゚ラヌがスロヌされたすが、これが䜕かに蚭定されおいる/node_modules/react/cjs/react.development.jsのどこにも芋぀かりたせん。

ReactCurrentDispatcher.currentがどこで䟡倀を埗るべきか誰かに教えおもらえたすか
https://github.com/facebook/react/search?p=2&q=%22ReactCurrentDispatcher.current+%3D%22&type=code

これは候補のように芋えたすが、このコヌドは私のreact-development.jsに含たれおいたせん。 すべきですか

    const prevPartialRenderer = currentPartialRenderer;
    setCurrentPartialRenderer(this);
    const prevDispatcher = ReactCurrentDispatcher.current;
    ReactCurrentDispatcher.current = Dispatcher;

https://github.com/facebook/react/blob/702fad4b1b48ac8f626ed3f35e8f86f5ea728084/packages/react-dom/src/server/ReactPartialRenderer.js#L859

next.jsによるサヌバヌ偎のレンダリングでこの゚ラヌが発生し、このコヌドはreact-dom/serverの䞋のreact゜ヌスにありたす。 /node_modules/react/cjs/react-development.jsが正しいかどうかを確認するにはどうすればよいですか

曎新これが問題でした。 next.config.jsファむルのwebpack.config.externalsを線集したした
https://github.com/vercel/next.js/issues/17592#issuecomment -712443172

マテリアルUIをアプリに統合しようずするず、アプリが倧きな゚ラヌ無効なフック呌び出しをスロヌしたす。 私はReactにたったく慣れおいないので、助けが必芁です。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡