我有點困惑如何以一種很好和可以理解的方式構建我的反應/通量(flummox)應用程序。父組件響應多個子組件輸入
我有一個名爲StrategyList
的父組件,它顯示一個可過濾的「策略」列表。策略存儲在StrategyStore
(Flux)中。現在我的StrategyList
也有一個可重複使用的子組件ListFilter
,它顯示一個下拉菜單選擇一個類別和一個搜索框來過濾列表。
因爲我ListFilter
是可重複使用的,我通過兩個回調到它:
<ListFilter
onSearchQueryChange={this._handleSearchQueryChanged.bind(this)}
onCategoryChange={this._handleCategoryFilterChanged.bind(this)}
...
/>
現在,如果任何過濾器的值發生了變化(無論是類別或搜索查詢,我想在調用通量行動。我的父母StrategyList
組件API獲取新的列表項目
在大約每例子在那裏,他們有一個回調的子組件,然後家長做這樣的事情:
_handleSearchQueryChanged(searchQuery) {
this.props.flux.getActions('strategyActions').fetchData(searchQuery);
}
看起來不錯,它的工作原理就是這樣。但是...如果我提取數據,我需要發送類別和搜索查詢!我不能只依賴回調參數。我只能通過兩個特定的onChange回調獲取數據,我需要將值存儲在父組件中,對吧?
我現在迷茫,如果我應該:
1.存儲&類SEARCHQUERY我StrategyList
組件的狀態?
_handleSearchQueryChanged(searchQuery) {
this.setState({
searchQuery: searchQuery
};
this.props.flux.getActions('strategyActions').fetchData(
this.state.category,
this.state.searchQuery);
}
// Same for category...
- 當我這樣做,似乎作用從來沒有得到實際的狀態數據,但始終是一個落後一步(因爲的setState不同步?)
2.商店類別& searchQuery在我的商店?
爲此,我會在回調中調用Flux操作以保存輸入字段中的數據。
_handleSearchQueryChanged(searchQuery) {
this.props.flux.getActions('strategyActions').setSearchQuery(searchQuery);
}
_handleCategoryFilterChanged(category) {
this.props.flux.getActions('strategyActions').setCategory(category);
}
但是在這種情況下,我實際上在哪裏調用fetch動作?我什麼時候知道這兩個值中的任何一個已經改變,我需要激發數據加載?此外,創建操作僅用於將值保存到應用程序範圍內的存儲中,而這些操作從不使用,似乎是一種不必要的開銷。
3.其他地方?語境? ReactLink?我如何訪問這些值?
我不能訪問通過this.refs.*
子元素,因爲至少下拉是更高級別的componenent(材料UI),沒有裁判,但只有一個回調(其組成的div,而不是選擇-領域)。
謝謝你的幫助。
羅伯特
好的,謝謝,我會盡力的! – exophunk