[解決済み] React Router - バージョン更新後のwithRouterでTypescriptエラーが発生する。
質問
Reactアプリを以下のようにアップグレードしました。
react-router - 4.0.19 → 4.0.20
react - 16.0.30 から 16.0.34
typescript- バージョン "2.7.0-insiders.20180108"。
私のアプリでは、'withRouter' を使用しているところではどこでも、不可解な Typescript エラーが発生するようになりました。私は、それを動作させるために、すべてのインターフェースプロパティを 'any' に置き換えました。
import * as React from 'react';
import { Switch, Route, withRouter} from 'react-router-dom';
import { Login } from './Login';
import { connect } from 'react-redux';
import { RootAction, RootState } from './_redux';
class MainForm extends React.Component<any> {
constructor(props: any) {
super(props);
}
render() {
return (
<Switch>
<Route exact={true} path="/" component={Login}/>
<Route path="/accounts" component={AccountsView}/>
</Switch>
);
}
}
const mapStateToProps = (state: RootState) => ({
state
});
export const Main = withRouter(connect(mapStateToProps)(MainForm);
error TS2345: Argument of type 'ComponentClass> & {. WrappedComponent: ComponentType; }' に代入できません。 タイプのパラメータ 'ComponentType>'です。 タイプ 'ComponentClass> & { WrappedComponent: ComponentType; }' は、以下の型に割り当てることができません。 'StatelessComponent>'です。 タイプ 'ComponentClass> & { WrappedComponent: ComponentType; }' は、シグネチャ '(props.)' にマッチしません。 RouteComponentProps & { children? ReactNode; }, context?: any): ReactElement | null' です。
最後の行を次のように変換すると:
export const Main = connect(mapStateToProps)(MainForm);
エラーは出ないのですが、マジで悔しいです。 ありがとうございます。
EDIT に変更しました。
export const Main = connect(mapStateToProps)(withRouter(MainForm));
のように、Mayank Shuklaが提案した。しかし、今はエラーが発生する。
エラー TS2345: 'ComponentClass>' タイプの引数は タイプのパラメータに割り当てられない。RootState; } & DispatchProp>'です。 タイプ 'ComponentClass>' は は、'StatelessComponent<{ 状態' に割り当てられません。RootState; } & DispatchProp>' に割り当てられません。 タイプ 'ComponentClass>' は、シグネチャ '(props: { state: RootState; } & DispatchProp & {」というシグネチャにマッチしません。 children? ReactNode; }, context?: any): ReactElement | null' です。
どのように解決するのですか?
TypeScript 2.6にアップグレードしたところ、同じ問題が発生しました。
を使って何とか解決しました。
RouteComponentProps
.
URLの場合
http://localhost:8080/your-component/abc
とルート
<Route component={YourComponent} path="/your-component/:param1?" />
コンポーネントは次のようになります。
import * as React from 'react'
import { withRouter } from 'react-router-dom';
import {RouteComponentProps} from "react-router";
// Type whatever you expect in 'this.props.match.params.*'
type PathParamsType = {
param1: string,
}
// Your component own properties
type PropsType = RouteComponentProps<PathParamsType> & {
someString: string,
}
class YourComponent extends React.Component<PropsType> {
render() {
console.log(this.props); // Prints all props including routing-related
console.log(this.props.match.params.param1); // Prints 'abc'
console.log(typeof this.props.match.params.param1 === 'string'); // prints 'true'
return <div>...</div>;
}
}
export default withRouter(YourComponent);
関連
-
[解決済み】Reactでclsxを使用する方法
-
[解決済み] Apolloクライアントでログアウトした後、ストアをリセットする
-
[解決済み] ReactJS giving error Uncaught TypeError: Super expression は null か関数でなければならず、undefined ではありません。
-
[解決済み] MUI Boxは何のためのコンポーネントですか?
-
[解決済み] ReactJsのCreateClassは関数ではない
-
[解決済み] React + TypeScript のエラーです。この呼び出しにマッチするオーバーロードがありません
-
[解決済み] Angular 2の*ngForのReactでの同等品
-
[解決済み] Uncaught (in promise) Error: リクエストに失敗、ステータスコード404
-
[解決済み] Reactルータを使ったプログラムによるナビゲーション
-
[解決済み] React-routerのURLを更新したり、手動で書き込んだりするとうまくいかない
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ngrokがReact devサーバーに接続しようとすると、無効なホストヘッダが表示される。
-
[解決済み] ReactJS giving error Uncaught TypeError: Super expression は null か関数でなければならず、undefined ではありません。
-
[解決済み] バベルエラーです。JSX値は、式または引用されたJSXテキストのいずれかである必要があります。
-
[解決済み] jest: テストスイートの実行に失敗しました。予期しないトークンのインポート
-
[解決済み] MUI Boxは何のためのコンポーネントですか?
-
[解決済み] 'Proptypes'が定義されていない
-
[解決済み] 非必須項目に対するYupバリデーション
-
[解決済み] componentWillReceiveProps は名称が変更されました。
-
[解決済み] React Router - バージョン更新後のwithRouterでTypescriptエラーが発生する。
-
[解決済み] create-react-appビルドスクリプトを実行する際に、ビルド.env変数を設定するには?