我正在嘗試替換一個Backbone.Marionette應用程序來響應,並面臨着困難的思考查詢參數。我認爲我在理解這種模式時錯過了一個非常簡單的和平,所以我很抱歉如果這個問題完全是無稽之談。我會很感激任何支持,或者只是指向我可以更具體地谷歌的一些方向。如何處理查詢參數在react + react-router + flux
有一個/users
頁面列出了用戶,你可以通過搜索欄過濾用戶。因此,如果您想過濾其用戶名中包含'joe'的用戶,我會使用查詢參數(如/users?username=joe
)向服務器發出請求。此外,我還可以通過添加page
參數進行分頁(/users?username=joe&page=1
)。
如果我只考慮了功能性,流動很可能是
- 客戶端插入
joe
到輸入元素,點擊搜索。 - 點擊搜索按鈕觸發
Action
(如Action.getUser)。 - 的
Action
向服務器請求並接收結果 - 的
Dispatcher
調度的結果有效載荷給任何(通常是Store
)是感興趣的Action
的功能。更迭「由Action
- 的視圖(
Component
)通過聽取Store
重新呈現接收到新的結果的狀態變更」 - 的
Store
。
它按預期工作。但是,我希望客戶能夠爲當前過濾結果添加書籤,並且能夠在稍後再回到同一頁面。這意味着我需要在某個地方保存有關客戶所做搜索術語的明確信息,這通常是網址(我是對嗎?)。因此,我需要使用查詢參數更新網址以保存搜索詞(/users?username=joe&page=1
)。
我很困惑的是何時何地更新網址?我現在想出的是以下兩個選項 - 它們看起來並不乾淨。
選項1
- 客戶端插入
joe
到所述輸入元件,並點擊搜索。 - 單擊搜索按鈕會觸發ReactRouter與新查詢參數(
/users?username=joe&page=1
)的轉換。 - 視圖(
Component
)通過this.props.params
和this.props.query
接收新參數。 - 視圖(
Component
)觸發Action
,如Action.getUser
,具體取決於它收到的查詢參數 - 在這種情況下爲username=joe&page=1
。
在此之後,它是與上述相同的
選項2(僅圖6是從我上面解釋的不同)
- 客戶端插入
joe
到所述輸入元件和點擊搜索。 - 點擊搜索按鈕觸發
Action
(如Action.getUser)。 - 的
Action
向服務器請求並接收結果 - 的
Dispatcher
調度的結果有效載荷給任何(通常是Store
)是感興趣的Action
的功能。更迭「由Action
- 的視圖(
Component
)通過聽取Store
重新呈現接收到新的結果的狀態變更」 - 的
Store
。 不知怎麼(我不知道怎麼回事,但)它的網址更新取決於其props
(如this.props.searchusername
,並this.props.searchpage
)
什麼是處理查詢參數的最佳做法是什麼? (或者這可能不是特定於查詢參數) 我完全誤解了設計模式或架構?預先感謝您的支持。
有些文章我讀過
- Any way to get current params or current query from router (outside of component)?
- Async data and Flux stores
- Make it easier to add query parameters
- React Router and Arbitrary Query Params: Page Refreshes Unintentionally on Load?
- Add default params?
感謝您的建議。爲了讓某人爲搜索結果添加書籤,我認爲您需要一些關於搜索字詞的明確信息。這將是網址。我是對的嗎?我仍然不清楚在用戶單擊「搜索」按鈕時URL如何更新。選項1更接近您的解決方案嗎?對不起,我沒有足夠的知識。我非常感謝你的幫助。 – kenfdev
我明白你的意思了。我認爲你正在尋找https://github.com/rackt/react-router/blob/57543eb41ce45b994a29792d77c86cc10b51eac9/doc/06%20Mixins/Navigation.md – yujingz
基本上導航到同一個頁面使用參數(這種情況下,您的搜索字詞) – yujingz