2016-10-12 7 views
1

状態管理のためにReduxを使用しているアプリケーションがあり、フロータイプの注釈を追加しようとしています。Reduxアクションのタイプを定義する正しい方法は何ですか?

ここで私が取り組んでいる問題の概要を説明する非常に簡単なテストケースを作成しました。

私は労働組合Actionタイプを作成し、その後、減速関数内で、私はアクションのtypeプロパティに基づいて返すためにどのような状態についての意思決定を行うためにswitchを使用しています。 switch文のそれぞれのケース内で、私はactionパラメータの異なるプロパティにアクセスしています。

なぜFlowがaction引数で特定のプロパティを見つけることができないと言っているのか分かりません。すべてが適切に定義されているように見えますが、ここで間違っているものは実際には見えません。

ここに私のテストケースです:

https://flowtype.org/try/#0C4TwDgpgBAggxsAlgewHZQLxQFBSgHygG8pRIAuKAcgDEBJAJQGUAVKgGigBMBDYHygHkARgCsICKAF9cBYqXARKVJgFEAwoIByAEQ5REwCAFs6XSgGdgAJ0SoA5tOzYy0JvyOZisgDaIrlDDW1jwgADwi4ggAfOzYMtgAZgCuqAgo6NYQXMlwEAAUVnxKUO7FnDzpaIFVqACUlKjJxsIQ1t54FgDuhnAAFlD5lUhoAHSudR14UHA8FtC0jKxUlESy01BZwMnW6EVGo35Wo4l2XHSoXBAAHvmGJpjRBkbGo4hcmBhYwxmjvPxvLh1ADc6ycG1m82oak0uhWUw2Wx2ew8EEO-mAJzOFyut3uxkezxMgM+31qbxeZhBYJkGyuiR4yR8wHIYLwSN2UAADKC8DIpEA

私はここに同じ問題で、ifを使用したバージョンだ、は多分問題がswitchステートメントを使用してに関連していたことを考えた:

https://flowtype.org/try/#0C4TwDgpgBAggxsAlgewHZQLxQFBSgHygG8pRIAuKAcgDEBJAJQGUAVKgGigBMBDYHygHkARgCsICKAF9cBYqXARKVJgFEAwoIByAEQ5REwCAFs6XSgGdgAJ0SoA5tOzYy0JvyOZisgDaIrlDDW1jwgADwi4ggAfOzYMtgAZgCuqAgo6NYQXMlwEAAUVnxKUO7FnDzpaIFVqACUlKjJxsIQ1t54iIlQ+ZVIaAB0rpgYWLSMrFR1HXhQWcDJ1uhFRgN+VgOJdlx0qFwQAB75hiaY0QZGxgOIXCNYfRkDvPzXXHUA3LIyeLJdPQ+DYajMZqTS6KYzPDzRbLDwQNb+YCbba7fZHE7GM4XEyvO5QAGoa6XMwfL6yWTQpZQAAMnykQA

+0

どのような流れが起こっているかわからないので、あなたのレデューサーはそれが本当に送信していると思われる場合はうまく見えます。何とかここでレフィックスを使っているのですか?レフィックスがやっていると思っていることだけをテストしていますか? – ajmajmajma

+0

2つのことは別々ですが、私はReduxのアクションとレデューサーにフロータイプの注釈を追加しようとしています。 –

+0

入手しました。最後の編集で何を意味するかわからない - なぜそれがエラーであると思うだろうか? – ajmajmajma

答えて

1

まず、reduceの機能は有効な減速機。 Reduxの減速機は、次のシグネチャ

(state: State, action: Action) => State 

流れを持っている必要があります(理論的にはあなたがコールバックでaction.data参照を変えることができる)の改良について悲観的です。フローは洗練を保つのを助けるための方法は、結合のconst(docs

function reduce(state: State, action: Action): number { 
    switch (action.type) { 
    case 'FIRST': 
     const data = action.data; 
     return state.list.findIndex(item => item.id === data.id); 
    case 'SECOND': 
     const itemId = action.itemId 
     return state.list.findIndex(item => item.id === itemId); 
    default: 
     return 0; 
    } 
} 

または、IMOより良いを使用することで、いくつかのヘルパー関数も

function findIndex(state: State, id): number { 
    return state.list.findIndex(item => item.id === id); 
} 

function reduce(state: State, action: Action): number { 
    switch (action.type) { 
    case 'FIRST': 
     return findIndex(state, action.data.id) 
    case 'SECOND': 
     return findIndex(state, action.itemId) 
    default: 
     return 0; 
    } 
} 

に例を分割し、あなたが見つけることができますredux repoのflow-typedアプリの例(examples/todos-flowを参照)

関連する問題