2016-07-22 51 views
2

我正在構建一箇中等大小的React/Redux應用程序,並且我已經對React變得非常舒服 - 但是,Redux仍然有點難以纏繞我的頭。需要在還原狀態下儲存什麼?

據我所知,我可以使用Redux的connect()將任何組件或容器連接到Redux狀態。然而,我不清楚什麼時候這樣做 - 它是基於複雜性嗎?需要將多少道具傳遞給兒童組件?

什麼因素可以用來決定何時使用connect()

編輯,以提供一個例子:-----

例如,我想包括消息區域用於我的應用程序,特別是示出的未讀消息的數量的徽章內的用戶。我想簡單地connect()任何我想顯示徽章的組件?

+0

您將您的應用程序狀態存儲在redux中。即用你的redux狀態替換this.setState的用法。 – jzm

+0

我基本上對此感到滿意 - 但是在不使用'setState()'的情況下,我們的目標是在redux應用程序中?在任何情況下? – Toby

+0

對於大多數情況,是的。你不必完全消除它,但是需要傳遞給另一個組件的任何道具將被存儲在redux中,而不是從redux狀態中取出 – jzm

回答

4

您將應用程序的狀態存儲在redux中。你如何構建你的狀態樹取決於你。你可以將狀態樹看作一個巨大的javascript對象。使用redux時,您最好將反應組件自身中的組件狀態存儲爲小組件狀態,並將其移至redux狀態樹。

例如,如果您提取了某些用戶數據,則可以將其存儲在redux狀態,以便您的連接組件現在可以訪問該數據。您還可以獲得更詳細的信息並存儲描述某些UI組件的狀態。描述一個下拉的狀態的一部分可能看起來像這樣

{ 
    myDropdown: { 
    isOpen: false, 
    options: [ 
     'apple', 
     'orange' 
    ] 
    } 
} 

我相信一個好點開始納入Redux的是,當你的應用達到一定地步,你的組件不再只是「啞巴」組件顯示數據。

編輯: 嘗試回答「我應該何時連接組件?」這個問題。我自己也在努力,但還沒有很好的答案。現在,我通常會連接一個組件,如果我通過許多祖先組件專門傳遞道具組件的話。所以連接會完全避免這種樣板代碼。

+0

這很有幫助 - 雖然我覺得我很難將頭圍繞着像這樣的小細節的巨大物體的想法。關於這個主題的許多文章都說,很難知道何時使用redux狀態或本地狀態,我希望有更清晰的答案 - 非常感謝。 – Toby

+0

大部分情況下,如果您有一個react-redux應用程序,我會完全避免本地狀態,除非您可以嘗試解決組件特定的問題。例如,如果我的組件在setInterval上執行某些操作,並且它保留了自己的計時器,我將使用本地狀態。 – Jackson

+0

這很有道理,謝謝。 – Toby

6

我不同意在商店中存儲所有組件狀態。我更喜歡在redux存儲區中只存儲對應用程序整體而言很重要的數據,因此其他組件可能會受益於此全局可訪問的共享數據。

在商店中具有組件特定的狀態,只對該組件有影響,是一個矯枉過正的無用IMO。

+0

我回來了。將UI狀態置入Redux只會讓你自己難以管理狀態。您的應用程序也將變得很慢,因爲糟糕的Redux實現會導致大量無用的重新呈現以及組件正在監聽Redux狀態更改,這些更改不應該聽到。 –