2016-12-29 12 views
2

react-redux connect関数(デコレータ)を使用してプロパティを設定するReactコンポーネントがあります。 JSXでこのコンポーネントを参照する場合、flowtypeは「プロパティは、要素を反応させるのでは...の小道具が見つからない」文句React Redx Flowtype「プロパティが見つかりません」reduxからプロパティを取得するReact要素connect

type SidebarCmpProps = { 
    activeSidebarComponent: string, 
    actions: { openCallMember:() => void } 
} 

@connect(
    (state) => { 
    return { activeSidebarComponent: state.sidebar.activeSidebarComponent } 
    }, 
    (dispatch) => ({ actions: bindActionCreators({ openCallMember }, dispatch) }) 
) 
class Sidebar extends React.Component { 
    props: SidebarCmpProps 
    static propTypes = { 
    actions: React.PropTypes.object.isRequired, 
    activeSidebarComponent: React.PropTypes.string 
    } 
} 

正確なエラーは次のとおりです。

 
65:   
      ^^^^^^^^^^^ React element `Sidebar` 
56: props: SidebarCmpProps 
       ^^^^^^^^^^^^^^^ property `actions`. Property not found in... 
65:   
      ^^^^^^^^^^^ props of React element `Sidebar` 

は私が持っていたエラーを回避するにはanyの労働組合の種類にプロパティを変更し、理想的な

type SidebarCmpProps = { 
    activeSidebarComponent: any | string, 
    actions: any | { openCallMember:() => void } 
} 
class Sidebar extends React.Component { 
    static defaultProps: SidebarCmpProps = { 
    actions: null, 
    activeSidebarComponent: null 
    } 
} 

未満のdefaultPropsを、追加しますより良い解決策はありますか?

+0

'propTypes'に' actions'を書いてみましたか? –

+0

'prop'を' propTypes'で形状に変更しても、エラーを "解決"するために 'any'共用体型を使う必要がありません。私は 'activeSidebarComponent:string'プロップからも同じエラーを受け取ります(簡潔さのため、上に貼り付けません) – joshm1

答えて

-1

あなたは、コンポーネントの両方が、オプションの小道具、あなたがそうのようにそれらを定義する必要がありますようにしたい場合:また

type SidebarCmpProps = { 
    activeSidebarComponent?: string, 
    actions?: { openCallMember:() => void } 
} 

、私はそれがのリアクトpropTypesとflowtypeの両方を提供することをお勧めしますかどうかわからないんだけど。それは論理の重複ですね。

+1

問題は私がそれをオプションにしたくないということです。あなたの提案は、nullをチェックする必要があります。これらのプロパティは、常にreact-reduxの 'connect'関数によって設定されることを知っているので、不要です。私は効果的に、フローに特定のコンポーネントに対するこの検証を無視/スキップするよう指示する方法を探しています。 – joshm1

0

ちょうどactiveSidebarComponent小道具を@connectに設定しており、アクションが必要な小道具actions: React.PropTypes.object.isRequiredと宣言されているため、property 'actions'. Property not found inエラーが発生しています。

したがって、actionsのデフォルト値を設定して、その制限を適用または削除する必要があります。

+2

はい、私はダミー/ノーオペレーションのデフォルト値をいくつか作成することができます。しかし、デフォルト値は 'connect'関数にマップされている限り使われることはないので、新しい無用な定型文がたくさん作成されます。この検証を無視するようにフローを設定する方法があると私は望んでいました。 – joshm1

関連する問題