2017-07-22 54 views
1

我想弄清楚如何有條件地渲染部分反應。我的情況是,當列表項目處於活動狀態時,應該呈現部分內容。有條件地渲染靜態部分的反應 - MERN

我正在使用引導程序,它有一個可用的活動元素。

我的目標是實現類似對講機的條款頁面的內容:https://www.intercom.com/terms-and-policies#billing

在我的主菜單,我有:

import React from 'react'; 
import ReactDOM from 'react-dom'; 

var Terms = require('../overview/terms.jsx'); 
var Privacy = require('../overview/privacy.jsx'); 
var Cookies = require('../overview/cookies.jsx'); 
var Thirdparty = require('../overview/thirdparty.jsx'); 
var Website = require('../overview/website.jsx'); 
var Sla = require('../overview/sla.jsx'); 
var Acceptable = require('../overview/acceptable.jsx'); 
var Billing = require('../overview/billing.jsx'); 
var Information = require('../overview/information.jsx'); 
var Incident = require('../overview/incident.jsx'); 
var Bug = require('../overview/bug.jsx'); 


class Menu extends React.Component { 

render() { 
    return (
     <div> 
     <div className = "row"> 
      <div className = "col-md-8 col-md-offset-2 generalhead"> 
      Terms and Policies 
      </div> 
     </div> 
     <div className = "row"> 
      <div className = "col-md-3 col-md-offset-1"> 
      <ul className="list-group"> 

       <a href="#" className="list-group-item list-group-item-action listitems" data-attribute = "terms">Terms of Service</a> 
       <a href="#" className="list-group-item list-group-item-action listitems" data-attribute = "privacy">Privacy Policy</a> 
       <a href="#" className="list-group-item list-group-item-action listitems" data-attribute = "cookies">Cookies</a> 
       <a href="#" className="list-group-item list-group-item-action listitems" data-attribute = "thirdparty">Third Party Processors</a> 
       <a href="#" className="list-group-item list-group-item-action listitems" data-attribute = "website">Website Use</a> 
       <a href="#" className="list-group-item list-group-item-action listitems" data-attribute = "sla">Service Level Agreement</a> 
       <a href="#" className="list-group-item list-group-item-action listitems" data-attribute = "acceptable">Acceptable Use</a> 
       <a href="#" className="list-group-item list-group-item-action listitems" data-attribute = "billing">Billing</a> 
       <a href="#" className="list-group-item list-group-item-action listitems" data-attribute = "information">Information Security</a> 
       <a href="#" className="list-group-item list-group-item-action disabled listitems" data-attribute = "incident">Incident Response Plan</a> 
       <a href="#" className="list-group-item list-group-item-action disabled listitems" data-attribute = "bug">Bug Bounty</a> 

      </ul> 
      </div> 
      <div className = "col-md-6 col-md-offset-1"> 
      <Terms /> 
      <Privacy /> 
      <Cookies /> 
      <Thirdparty /> 
      <Website /> 
      <Sla /> 
      <Acceptable /> 
      <Billing /> 
      <Information /> 
      <Incident /> 
      <Bug /> 
      </div> 

     </div> 
     </div> 
    ); 
    } 
} 

module.exports = Menu; 

每個列表項有一個名爲數據屬性。當該屬性是活動項目時,我想要渲染該部分。目前他們都在渲染。

我已閱讀上的反應條件呈現文檔:https://facebook.github.io/react/docs/conditional-rendering.html

我試圖界定一個const稱爲主動,我認爲可能利用引導類的 - 但是,這是行不通的。對於如何做到這一點,我必須得到錯誤的結局。我看起來像一個簡單的隱藏節目爲一個軌道js切換。我無法弄清楚如何開始解決這個問題。

任何人都可以給我一個正確的方向指導嗎?

回答

1

跟蹤哪些列表項目是活躍在您的國家

<a href="#" onClick={() => this.setState({active: 'terms'})}>Terms of Service</a> 

然後有條件地僅使活動項目

{this.state.active == 'terms' && <Terms />} 

但我建議使用反應路由器替代,因爲每個項目似乎對應頁面。

編輯

你有一個構造函數添加到類,使其狀態

class Menu extends React.Component { 
    constructor(props) { 
     super(props); 
     this.state = { 
      active: false 
     }; 
    } 
    . 
    . 
    . 
+0

感謝您的幫助。我試圖使用這個建議。我認爲問題的一部分可能是我使用擴展React來創建類而不是'create.class'。我改變了這個說法,試圖確保「this」綁定,{this.state.active.bind(this)=='terms'&& }。我得到一個錯誤,說TypeError:無法讀取null的屬性'active' – Mel

+0

它與'擴展React.Component'無關,只是意味着你擴展了可以提供反應的Component類。這是你如何製作類組件。或者你可以'擴展PureComponent'。不需要'將(this)'綁定到this.state.active。除非你在那裏存儲一個你打算用作回調的函數,但是你會在類的構造函數中進行綁定。你需要在你的類上有一個構造函數,並且使用'super',這樣你就可以訪問'this',然後設置類的初始狀態。閱讀這個https://facebook.github.io/react/docs/react-component.html –

+0

@KyleRichardson - 謝謝 - 如果我嘗試使用FuzzyTree的建議,我得到一個錯誤,說:TypeError:無法讀取屬性'活躍'的空值。谷歌搜索錯誤提示綁定聲明。你能看到一些概述有相關的解釋嗎? – Mel