React Apolloを使用してデータストア内のすべてのレコードを照会するので、検索フィルタ内で選択肢を作成できます。React Apolloクエリの返信後にReduxアクションを返す
私が使用している重要なデータベースモデルはReport
です。
A Report
はdoorType
、doorWidth
、glass
とmanufacturer
フィールドがあります。明らかにクエリは、私は、アレイを通過し、ちょうどそうのように、選択可能なリストを作るためにユニークなアイテムを取得し、複数のダムのコンポーネントにallReports
を渡している応答現在
..
const uniqueItems = []
items.map(i => {
const current = i[itemType]
if (typeof current === 'object') {
if (uniqueItems.filter(o => o.id !== current.id)) {
return uniqueItems.push(current)
}
} else if (!uniqueItems.includes(current)) {
return uniqueItems.push(current)
}
return
})
このコードかなりではありませんし、少し過度のことです。
私のSidebarFilter
コンポーネント内でクエリが返されたときにアクションをディスパッチしたいと思います。ここでクエリがある...
const withData = graphql(REPORT_FILTER_QUERY, {
options: ({ isPublished }) => ({
variables: { isPublished }
})
})
const mapStateToProps = ({
reportFilter: { isPublished }
// filterOptions: { doorWidths }
}) => ({
isAssessment
// doorWidths
})
const mapDispatchToProps = dispatch =>
bindActionCreators(
{
resetFilter,
saveFilter,
setDoorWidths,
handleDoorWidthSelect
},
dispatch
)
export default compose(connect(mapStateToProps, mapDispatchToProps), withData)(
Filter
)
ReduxのアクションsetDoorWidths
基本的にSidebarFilter
コンポーネントのコード上で行いますが、ので、私は、ユーザーが戻ってくる必要があるクエリを再実行する必要はありませんストアに保持されますページに
データが更新され、サイドバーを変更する必要がほとんどありません。
graphql
関数にはprops
引数を使用することをお勧めします。私は、データがownProps
から取られ、ここでアクションがディスパッチされるかもしれないが、データがエラーを起こしているか、ロードされている可能性があり、レンダリングが中断されます。
編集:
問合せ:
query ($isPublished: Boolean!){
allReports(filter:{
isPublished: $isPublished
}) {
id
oldId
dbrw
core
manufacturer {
id
name
}
doorWidth
doorType
glass
testBy
testDate
testId
isAssessment
file {
url
}
}
}
ありがとうございます - 元のクエリで私の投稿を更新しましたが、後で私のマシンに入るまであなたの解決策を試すことはできません。 –
この例では、データのデフォルト値を使用するように更新しました。まだ期待どおりの行動を取れない場合は教えてください。 –