[解決済み] React.cloneElementのプロパティを子に与えるとき、正しいタイピングを割り当てるにはどうすればよいですか?
2023-01-22 05:21:37
質問
ReactとTypescriptを使用しています。ラッパーとして動作するリアクトコンポーネントがあり、そのプロパティを子要素にコピーしたいと思っています。Reactのガイドに従ってclone要素を使用しています。
https://facebook.github.io/react/blog/2015/03/03/react-v0.13-rc2.html#react.cloneelement
. しかし
React.cloneElement
を使用すると、Typescriptから以下のようなエラーが表示されます。
Argument of type 'ReactChild' is not assignable to parameter of type 'ReactElement<any>'.at line 27 col 39
Type 'string' is not assignable to type 'ReactElement<any>'.
react.cloneElementに正しい型付けをするにはどうしたらよいですか?
上記のエラーを再現する例です。
import * as React from 'react';
interface AnimationProperties {
width: number;
height: number;
}
/**
* the svg html element which serves as a wrapper for the entire animation
*/
export class Animation extends React.Component<AnimationProperties, undefined>{
/**
* render all children with properties from parent
*
* @return {React.ReactNode} react children
*/
renderChildren(): React.ReactNode {
return React.Children.map(this.props.children, (child) => {
return React.cloneElement(child, { // <-- line that is causing error
width: this.props.width,
height: this.props.height
});
});
}
/**
* render method for react component
*/
render() {
return React.createElement('svg', {
width: this.props.width,
height: this.props.height
}, this.renderChildren());
}
}
どのように解決するのですか?
問題は
の定義が
ReactChild
はこうです。
type ReactText = string | number;
type ReactChild = ReactElement<any> | ReactText;
もし、あなたが
child
は常に
ReactElement
であれば、それをキャストします。
return React.cloneElement(child as React.ReactElement<any>, {
width: this.props.width,
height: this.props.height
});
それ以外の場合は isValidElement タイプガード :
if (React.isValidElement(child)) {
return React.cloneElement(child, {
width: this.props.width,
height: this.props.height
});
}
(今まで使っていなかったが、定義ファイルによるとある)
関連
-
[解決済み】ReactJS: マテリアルuiのブレークポイントについて
-
[解決済み】Reactでclsxを使用する方法
-
[解決済み] error 'document' is not defined : eslint / React
-
[解決済み] useStateプロパティのフックにmap関数を使用する方法
-
[解決済み] SVGサークル内の画像にボーダーを追加する方法
-
[解決済み] MUI Boxは何のためのコンポーネントですか?
-
[解決済み] React - _this2.SetStateは関数ではありません。
-
[解決済み] ReactコンポーネントのJest SnapshotテストにおけるSnapshotテストの仕組みとtoMatchSnapshot()関数は何をするのか?
-
[解決済み] Reactでグローバル変数を宣言する方法とは?
-
[解決済み] TypeScriptでオブジェクトに動的にプロパティを割り当てるには?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Apolloクライアントでログアウトした後、ストアをリセットする
-
[解決済み] reactでonloadを使うには?
-
[解決済み] error 'document' is not defined : eslint / React
-
[解決済み] Next.jsでWebSocketを利用する
-
[解決済み] ReactJS: Warning: setState(...): 既存の状態遷移の間に更新することはできません
-
[解決済み] jest: テストスイートの実行に失敗しました。予期しないトークンのインポート
-
[解決済み] プロップ `history` は `Router` で必須とマークされているが、その値は `undefined` である。
-
[解決済み] nextjsで異なる.envファイルを使用するには?
-
[解決済み] React Router - バージョン更新後のwithRouterでTypescriptエラーが発生する。
-
[解決済み] react-router-domを使用する際に「Function components cannot be given refs」を回避する方法は?