[解決済み] Typescript + React/Redux: プロパティ "XXX" が型 'IntrinsicAttributes & IntrinsicClassAttributes' に存在しない。
質問
私はTypescript、React、Redux(すべてElectronで動作)を使ったプロジェクトに取り組んでいますが、あるクラスベースのコンポーネントを別のコンポーネントに含め、それらの間でパラメータを渡そうとしたときに問題に遭遇しました。大雑把に言うと、コンテナ・コンポーネントは以下のような構造になっています。
class ContainerComponent extends React.Component<any,any> {
..
render() {
const { propToPass } = this.props;
...
<ChildComponent propToPass={propToPass} />
...
}
}
....
export default connect(mapStateToProps, mapDispatchToProps)(ContainerComponent);
そして子コンポーネント。
interface IChildComponentProps extends React.Props<any> {
propToPass: any
}
class ChildComponent extends React.Component<IChildComponentProps, any> {
...
}
....
export default connect(mapStateToProps, mapDispatchToProps)(ChildComponent);
もちろん、私は基本的なことしか言っていませんし、これらのクラスにはもっと多くのものがあります。しかし、私には有効なコードのように見えるものを実行しようとすると、まだエラーが発生します。私が得ている正確なエラー。
TS2339: Property 'propToPass' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes<Component<{}, ComponentState>> & Readonly<{ childr...'.
最初にこのエラーに遭遇したとき、私はプロップを定義するインターフェイスを渡していなかったからだと思ったのですが、(上にあるように)それを作成しましたが、まだ動作しません。何か見逃しているものがあるのでしょうか?
ChildComponent プロップを ContainerComponent のコードから除外すると、(ChildComponent が重要なプロップを持っていないことは別として)うまくレンダリングされますが、JSX Typescript に含めるとコンパイルが拒否されます。私は、この問題は この記事 に基づく接続ラップと関係があるかもしれないと思いますが、その記事の問題は index.tsx ファイルで発生し、プロバイダの問題であり、私は別の場所で問題を得ています。
どのように解決するのですか?
というわけで、いくつかの関連する回答 (具体的には これ と これ と@basaratの回答を見て、私は私のために働く何かを見つけることに成功しました。私の比較的新しいReactの目には)Connectがコンテナコンポーネントに明示的なインターフェースを供給していなかったので、渡そうとしたpropによって混乱したように見えます。
そのため、コンテナコンポーネントは同じままでしたが、子コンポーネントは少し変わりました。
interface IChildComponentProps extends React.Props<any> {
... (other props needed by component)
}
interface PassedProps extends React.Props<any> {
propToPass: any
}
class ChildComponent extends React.Component<IChildComponentProps & PassedProps, any> {
...
}
....
export default connect<{}, {}, PassedProps>(mapStateToProps, mapDispatchToProps) (ChildComponent);
上記はなんとか動作しました。コンポーネントがコンテナから期待するプロップを明示的に渡すと、うまくいくようで、両方のコンポーネントが適切にレンダリングされました。
注意してください。 私はこれが非常に単純化された答えであり、これが動作する理由を正確に理解していないことを知っているので、より経験豊富なReactの忍者がこの答えにいくつかの知識を落としたいと思うなら、私はそれを修正することを嬉しく思います。
関連
-
[解決済み】<Router>の外側で<Link>を使用してはならない
-
[解決済み】React 17で動作するEnzymeアダプターはどれですか?
-
[解決済み] ReactJS giving error Uncaught TypeError: Super expression は null か関数でなければならず、undefined ではありません。
-
[解決済み] MUI Boxは何のためのコンポーネントですか?
-
[解決済み] TypeError: reactjs の未定義のプロパティ 'status' を読み取ることができません。
-
[解決済み] react router dom v4でwebpack dev serverを構成する方法は?
-
[解決済み] ReactコンポーネントのJest SnapshotテストにおけるSnapshotテストの仕組みとtoMatchSnapshot()関数は何をするのか?
-
[解決済み] react-navigation v5を使ったreact-nativeアプリのAppNavigatorの構文を更新する。
-
[解決済み] react-router-domを使用する際に「Function components cannot be given refs」を回避する方法は?
-
[解決済み] React QueryとReduxの主な違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み] React + TypeScript のエラーです。この呼び出しにマッチするオーバーロードがありません
-
[解決済み] MUI Boxは何のためのコンポーネントですか?
-
[解決済み] TypeError: reactjs の未定義のプロパティ 'status' を読み取ることができません。
-
[解決済み] formcontrollabel - material-ui | Reactのデフォルトのtypography classを変更するには?
-
[解決済み] React-Router 4 キャッチオールルート
-
[解決済み] ReactJS - SCRIPT1010: 期待される識別子 - IE11 で本番ビルドが実行されない
-
[解決済み] React JSでは、状態を直接変異させない、setState() react/no-direct-mutation-stateを使用する。
-
[解決済み] axios-mock-adapter onGet mock data not effective.
-
[解決済み] nginxでcertbotを使用する際の問題点