我使用終極版(+反應)進行分層結構操作,我有兩個問題:?
- 如何實現終極版多態性?
- 如何使 「行動冒泡」
我的問題表達更準確:
- 。
我在使用Redux在React中進行結構代碼編輯。通過結構編輯器,我的意思是我有樹結構和節點,我的應用程序應該在AST上運行而不是純文本。這些節點可以有多種類型(因爲它是用於編輯CSS文件的編輯器,例如這些類型是:「規則」,「聲明」,「屬性」,「值」,但是它們確實有一些更重要鍵入)。因此,有在JS對象具有財產type
及其type
決定了它...類型;)
所以假設我有節點是這樣的:
{
type: 'property',
id: 4,
rule: '.content > ul > li',
children: [...blah blah......]
}
而且我希望能夠寫東西這樣的:
store.dispatch({type: 'click', nodeId: 4})
的點擊。但我希望單擊類型rule
的節點上的點擊將會比單擊property
類型的節點具有其他作用。多態性(但我希望有一個反應組件<Node />
以防止代碼重複)。
我知道我可以通過switch/case或者我自己的子功能(我的意思是將動作委託給函數)來實現,但我不想重新發明輪子。我認爲多態性的支持對許多應用程序很有用,不僅僅是我的。
那麼 - 如何在Redux中實現多態?
2.,
關於動作冒泡的第二個問題。因爲我也有樹狀結構,例如這種像這樣的:
{
type: 'rule',
rule: 'body div',
id: 1,
children: [
{
type: 'declaration',
id: 2,
children: [
{type: 'property', name: 'display', id: 3},
{type: 'value', value: 'block', id: 4},
]
}
]
}
我有適當的做出反應的是渲染結構組件(我有啞功能爲基礎的無狀態的陣營0.14組件,所以我不認爲組件的代碼現在非常重要)。無論如何,我得到代表單個AST節點的<Node/>
組件。
我想用戶可以點擊例如節點上的id = 3({type: 'property', name: 'display', id: 3},
),動作會自動「冒泡」到節點的父母(在這種情況下,聲明節點在id = 2和規則節點在id = 1)。
據我所知,在Redux中沒有「動作冒泡」。也許它應該是?或者,也許我想通過其他方式實現我想實現的目標? (通過「動作冒泡」我的意思是在瀏覽器中的JavaScript事件中類似於「事件冒泡」,只有我想redux actions
冒泡,並且我不希望DOM事件冒泡(這完全是其他事情)。我想將行動減少到泡沫。當我寫下「冒泡」時,我將整體設計模式而不是執行。
而這是我的兩個問題:)
1.多態性不是關於繼承,而是「爲不同類型的實體提供單一接口」。 (https://en.wikipedia.org/wiki/Polymorphism_(computer_science))。例如Redux reducer是多態的,因爲根據動作類型,一個reducer函數應該有不同的反應:) – hex13
2.我在「自上而下」的方法中遇到了問題,因爲在每次操作之後,整個樹被重新渲染並且應用程序非常慢。也許我做錯了,但現在我自己將Redux連接到React(沒有官方綁定),而不是「自上而下」,我將每個無狀態元素放在智能有狀態容器中,用於監聽有趣狀態片段的變化並重新渲染它的無聲無子的孩子。 – hex13