2017-09-06 133 views
1

我正在開發一個需要事件偵聽器的應用程序。提供給此事件偵聽器的函數正在與DOM進行交互。相同的功能也需要運行當組件安裝:如何爲服務器端React創建事件偵聽器?

... 
componentDidMount() { 
    this.getWidth(); 
    window.addEventListener('resize', this.getWidth); 
} 

getWidth =() => { 
    const elem = this.elem.clientWidth; 
    ... 
} 

render() { 
    return(
     <div> 
      <SomeComponent 
       ref={(elem) => this.elem = elem} 
      /> 
     </div> 
    ); 
} 
... 

作爲該應用程序呈現服務器端最初,則componentDidMount生命週期方法不運行,因此,getWidth函數不運行並且事件偵聽不會添加到窗口對象。我該如何做這項工作?

+0

你是什麼意思「渲染服務器端」?你用什麼來完成這件事? – sigmus

+0

它使用Node呈現在服務器端。然後,一旦第一頁下載React接管。但是,在React接管之前,componentDidMount生命週期方法將不會運行,並且我需要它立即運行。 – JoeTidee

回答

0

從文檔(https://facebook.github.io/react/docs/react-dom-server.html):

如果你已經有這個 服務器呈現標記一個節點上調用ReactDOM.render(),陣營將保留它,只重視事件 處理程序,允許你有一個非常高效的首次加載 的經驗。

+0

這是否適用於'window'事件,而不是僅僅單擊組件事件? – JoeTidee

+0

我不知道,你有測試過嗎? – sigmus

相關問題