私はコンポーネントを作り、それを次のように使用しました...
<TopNav
loggedIn={global.shared.loggedIn} // false
fullName={global.shared.fullName} // ''
avatar={global.shared.avatarId} // ''
/>
topNavコンポーネント内で、渡した小道具にアクセスできるようにしたいとし、props.history
または、更新せずにプログラムでユーザーをナビゲートする他の方法。
import React from 'react';
import { RouteComponentProps } from 'react-router-dom';
interface PropsInterfaceNew {
avatar: string;
loggedIn: boolean;
fullName: string;
}
interface PropsInterface
extends RouteComponentProps<PropsInterfaceNew> {}
// ^ Error
const TopNav: React.FC<PropsInterface> = (props: PropsInterface) => {
...
const firstName = props.fullName.split(' ')[0]; // I need props.fullName & others
const search = (event: React.FormEvent) => {
event.preventDefault();
props.history.Push('/my/profile'); // I need props.history
};
エラーは
Type 'PropsInterfaceNew' does not satisfy the constraint '{ avatar?: string | undefined; loggedIn?: string | undefined; fullName?: string | undefined; }'.
Types of property 'loggedIn' are incompatible.
Type 'boolean' is not assignable to type 'string | undefined'.ts(2344)
または、以下のように履歴を完全に削除すると、エラーは発生しませんが、履歴にアクセスできません
interface PropsInterface {
avatar: string;
loggedIn: boolean;
fullName: string;
}
const TopNav: React.FC<PropsInterface> = (props: PropsInterface) => {
...
@hardik置換した場合export { TopNav };
と...
export withRouter(TopNav);
//^ err1 ^err2
新しいエラー2が発生する
statements are not aligned (align)tslint(1)
とエラー1
Declaration or statement expected.ts(1128)
Hardik Chaudhary の提案に従って小道具を修正できます。RouteComponentPropsの最初の型パラメーターは小道具用ではないため、_interface PropsInterface extends RouteComponentProps { /* ... */ }
_を使用する必要があります( match に使用されます) )
また、コンポーネントをデフォルトのエクスポートとしてエクスポートする場合は、export
ではなく_export default
_を使用する必要があります。したがって、コードはexport default withRouter(TopNav);
である必要があり、react-routerは期待どおりにコンポーネントに小道具を挿入します。
または、名前付きエクスポートを希望する場合は、_export const
_を使用して、ルーターの小道具を挿入してコンポーネントをエクスポートできます。エクスポートという名前の_export {...}
_を使用したので、これはおそらくあなたのケースだと思います。
便宜上、コード全体を残して、提案を以下に適用します。
_import React from 'react';
import { RouteComponentProps, withRouter } from 'react-router-dom';
interface PropsInterface extends RouteComponentProps {
avatar: string;
loggedIn: boolean;
fullName: string;
}
const TopNav: React.FC<PropsInterface> = (props: PropsInterface) => { /* ... */ }
// if you prefer default export
export default withRouter(TopNav);
// if you prefer named export
// Note: You must change the name of component above.
export const TopNav = withRouter(TopNav);
_