2017-10-05 67 views
1

對於你來說,這應該是一件容易的事情了React怪物。 :)我有條件編寫,但我無法弄清楚如何在我的構造函數中處理視口大小以使條件生效。簡單而簡單,我想在視口大小爲1451px或更寬時顯示一個元素,而當1450px或更小時顯示另一個元素。React根據視口尺寸有條件地渲染

這是我的代碼(簡化)

class My Class extends React.Component { 
    constructor(props) { 
     super(props); 
     this.state = { 
      isDesktop: "1450px" //This is where I am having problems 
     }; 
    } 

    render() { 
     const isDesktop = this.state.isDesktop; 

     return (
      <div> 
       {isDesktop ? (
        <div>I show on 1451px or higher</div> 
       ) : (
        <div>I show on 1450px or lower</div> 
       )} 
      </div> 
     ); 
    } 
} 

也許我suppposed與ComponentWillMount或ComponentDidMount上班吧。老實說,不確定。我是React新手。

在此先感謝球員。

+0

是否要更新頁面調整時的isDesktop? –

+0

呃,好問題。我會說是的。隨着用戶調整大小,當寬度低於1450px寬時,它應該呈現正確的組件。我試圖在沒有CSS的情況下鍛鍊響應能力 – LOTUSMS

回答

2

也許我suppposed與ComponentWillMount或上班吧ComponentDidMount

是的,你要聽的resize事件和變化更新內部狀態。您可以通過在組件掛載時添加事件處理程序來完成此操作。嘗試完整示例here

class App extends React.Component { 
    constructor(props) { 
    super(props); 
    this.state = { 
     isDesktop: false //This is where I am having problems 
    }; 

    this.updatePredicate = this.updatePredicate.bind(this); 
    } 
    componentDidMount() { 
    this.updatePredicate(); 
    window.addEventListener("resize", this.updatePredicate); 
    } 

    componentWillUnmount() { 
    window.removeEventListener("resize", this.updatePredicate); 
    } 

    updatePredicate() { 
    this.setState({ isDesktop: window.innerWidth > 1450 }); 
    } 

    render() { 
    const isDesktop = this.state.isDesktop; 

    return (
     <div> 
     {isDesktop ? (
      <div>I show on 1451px or higher</div> 
     ) : (
      <div>I show on 1450px or lower</div> 
     )} 
     </div> 
    ); 
    } 
} 
+0

這就是金!我現在理解這個概念。我應該能夠在需要解決的其他情況下使用這個概念。謝謝! – LOTUSMS

0
class My Class extends React.Component { 
    constructor(props) { 
     super(props); 
     this.state = { 
      isDesktop: window.innerHeight > 1450, 
     }; 
    } 

    render() { 
     const isDesktop = this.state.isDesktop; 

     return (
      <div> 
       {isDesktop ? (
        <div>I show on 1451px or higher</div> 
      ) : (
        <div>I show on 1450px or lower</div> 
      )} 
      </div> 
    ); 
    }} 

這裏更多信息Get viewport/window height in ReactJS

+0

不幸的是,它並沒有奏效,innerHeight也引起了我的注意。你不是在處理高度而不是寬度?我的意思是處理視口的寬度。我嘗試了innerWidth,它也沒有工作。我沒有檢查過你提供的鏈接 – LOTUSMS

+0

你可以創建調整大小的監聽器,使用回調函數你可以改變isDesktop的狀態,目前這個實現只在刷新頁面上工作 – bobu