1

typescriptにdefaultPropsを指定してレスポンスステートレスコンポーネントを使用したかったのです。TypeScriptのReact StatelessComponentのDefaultProp

私は私がダイヤモンドの構文なし活字体プロジェクトにdefaultPropsを使用することができるようになるタイピングを使用する方法解決策を見つけることができないのです。

import {Link} from "react-router"; 

interface LinkProps { 
    ... 
} 

const LinkPresenter = (props: LinkProps): JSX.Element => 
    <Link 
     ... 
    > 
     ... 
    </Link>; 

LinkPresenter.defaultProps = { // !!! unresolved variable defaultProps 
    ... 
}; 
+0

感謝。 –

答えて

2

タイプReact.SFCステートレス成分を反応させることdefaultPropsを添付することを可能にします。

の例React.SFCdefaultPropsです。ただ、ここでは、私たちの会話に拡大する

import {Link} from "react-router"; 

interface LinkProps { 
    to?: HistoryModule.LocationDescriptorObject; 
    onClick?: (event: React.FormEvent) => void; 
    children?: React.ReactNode; 
} 

const LinkPresenter: React.SFC = (props: LinkProps): JSX.Element => 
    <Link 
     className="link" 
     to={props.to} 
     onClick={props.onClick} 
    > 
     {props.children} 
    </Link>; 

// Alternative syntax 
const LinkPresenter: React.StatelessComponent = (props: LinkProps): JSX.Element => 
... 

LinkPresenter.defaultProps = { // now we can use defaultProps 
    to: { 
     pathname: `/homepage`, 
     query: { 
      default: 'someDefault' 
     } 
    }, 
    onClick:() => {}, 
    children: <span>Hello world</span>, 
}; 
+2

しかし、これはtypescriptで行う必要はありません。メソッドのシグネチャにデフォルトの小道具、つまりconst LinkPresenter:React.SFC =(props:LinkProps = {to:{pathname: ''、query}})を設定することができます。 JSX.Element –

+1

@RossScottこれは興味深い考えですが、特定のデフォルトプロパティではなく、小道具オブジェクト全体を指定することしかできません。 –

+0

@RossScott:私はtypescriptに慣れています。あなたの提案する構文が好きです。 –

2

は、TS/ES6のデフォルトプロパティのアプローチを使用して代替手段です:私が参考に何かを見つけることができませんでしたリンクの

import {Link} from "react-router"; 

interface LinkProps { 
    to?: HistoryModule.LocationDescriptorObject; 
    onClick?: (event: React.FormEvent) => void; 
    children?: React.ReactNode; 
} 

let defaultProps : LinkProps = { 
    to: { 
     pathname: `/homepage`, 
     query: { 
      default: 'someDefault' 
     } 
    }, 
    onClick:() => {}, 
    children: <span>Hello world</span> 
} 

const LinkPresenter = (props: LinkProps = defaultProps): JSX.Element => 
    <Link 
     className="link" 
     to={props.to} 
     onClick={props.onClick} 
    > 
     {props.children} 
    </Link>; 
+1

あなたのソリューションは、ネストされたオブジェクトと、未定義の値を持つキーとで、動作が異なります。 –

+0

この構文は、propsとしてundefinedを指定して呼び出すと、未定義の小道具を返します。 defaultPropsアプローチは、デフォルトの小道具を接続して動作します。 –

関連する問題