簡體   English   中英

反應組件無限重渲染

[英]React Component Infinite Re-render

我有一個React組件結構:

CookiesProvider
  | App
    | BrowserRouter
      | AppContext.Provider
        | Layout
          | Switch
            | Route path="all-products" component={Gallery}

當我重構代碼並將整個Switch / Routes結構拉入無狀態組件時,或者將BrowserRouter組件放在CookieProvider組件之外時,Gallery組件將無限地重新呈現。 但是,如果我將結構保留在原位,那么一切都會很好。

我已經記錄了Gallery組件的安裝和卸載以及網絡調用。

為什么會這樣?

當前代碼結構:

// index.js
ReactDOM.render((
    <CookiesProvider>
        <Home />
    </CookiesProvider>
), document.getElementById('root'));

// render() of Home component
const galleryRefresh = this.state.galleryRefresh
return (
    <BrowserRouter>
        <AppContext.Provider value={this.state.context}>
            <Layout>
                <Switch>
                    <Route path="/all-products" component={()=> {
                        return <Gallery refresh={galleryRefresh} otherFilters={["type:clothes"]}/>
                    }}/>
                </Switch>
            </Layout>
        </AppContext.Provider>
    </BrowserRouter>
    )

當我重構Routes邏輯時:

// render() of Home Component
const galleryRefresh = this.state.galleryRefresh
return (
    <BrowserRouter>
        <AppContext.Provider value={this.state.context}>
            <Layout>
                <Route galleryRefresh={galleryRefresh}/>
            </Layout>
        </AppContext.Provider>
    </BrowserRouter>
)

// Routes stateless component
const Routes = ({galleryRefresh}) => (
    <Switch>
        <Route path="/all-watches" component={()=> {
            return <Gallery refresh={galleryRefresh} otherFilters={["type:Watch OR watch"]}/>
        }}/>
    </Switch>
)

在Route組件中,我應該使用render prop而不是component prop。

       <Switch>
            <Route path="/all-products" render={()=> {
                return <Gallery refresh={galleryRefresh} otherFilters={["type:clothes"]}/>
            }}/>
        </Switch>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM