2017-06-28 64 views
0

我可以知道是否可以使用HOC而不是extend來更改shouldcomponentupdate的子組件的行爲(覆蓋)?這方面的任何例子?覆蓋shouldcomponentupdate與HOC

+0

在HOC文檔? https://facebook.github.io/react/docs/higher-order-components.html哪一個說明這很糟糕,mmkay? –

+0

你可以擴展你爲什麼要這樣做嗎?正如另一位評論者指出,對包裝組件進行變異是一個壞主意,但是如果你想爲包裝組件定義一個更嚴格的'shouldComponentUpdate',那麼在HOC中定義它將會起作用。 – Jack

回答

1

是的。這可能在一定程度上。

我們可以實現HoC的shouldComponentUpdate,它將具有與通常在React Child組件中重寫子組件的shouldComponentUpdate相同的效果,如果父級重新渲染,則只會重新渲染。

function HoC(WrappedComponent) { 
    return class extends React.Component { 

    shouldComponentUpdate() { 
     // change the behaviour here 
    } 

    render() { 
     return <WrappedComponent {...this.props} />; 
    } 
    }; 
} 

然而,這不會如果孩子組件有任何內部狀態改變setState或工作,它是不是從父更新等不同的源forced to rerender。例如,如果子組件連接到Redux商店,並且該商店有connect,則它將在商店獲取更新時重新提交,而不管HoC中的重寫shouldComponentUpdate行爲。

+0

如果孩子還有shouldComponentUpdate(..),在HOC.shouldComponentUpdate被執行後,child.shouldComponentUpdate(..)仍然被執行。我想阻止孩子執行它 – cometta

+0

如果您在HoC.scu中返回false,它將不會執行Child.scu。在這種方法中,這是防止執行Child.scu的唯一方法。 –

+0

假設Hoc.scu返回true,那麼它會執行child.scu來查明它是否需要渲染孩子?我想跳過對child.scu的檢查,因爲child.scu的條件總是返回false,我希望HOC迫使孩子總是呈現 – cometta