React 篇 Search Bar and content Table

來源:互聯網
上載者:User

標籤:

我們要構建一個模組,其中包含一個內容顯示的表格,然後上面有一個提供Search的欄位,並對Search中輸入欄進行監聽,當有改變的時候,觸發Search然後對內容表中的內容進行過濾。

Demo Link:http://czrmodel.mybluemix.net/catalog.html  (順帶推廣一下IBM Bluemix,是IBM雲,目前全免費哦,跟aliyun不一樣的,Bluemix裡面內建很多服務,不需要自己搭應用伺服器和DB, aliyun直接給你一台虛擬機器,然後通過ssh連結或者vpn連結,所有的服務都要自己安裝。aliyun自己需要做的東西稍微多些,Bluemix封裝好的服務更多一些。大家看自己的情況去選吧,對於想做嘗試和學習的朋友還是用免費的Bluemix吧,當你真正想部署環境的話,還是應該考慮aliyun,因為畢竟他屬於國內的伺服器,網速快一些。)

這是一個使用率很高的組件。我們先看一下最終。

內容json

var data=[
          {"category": "Sporting Goods", "price": "$49.99", "stocked": true, "name": "Football"},
          {"category": "Sporting Goods", "price": "$9.99", "stocked": true, "name": "Baseball"},
          {"category": "Sporting Goods", "price": "$29.99", "stocked": false, "name": "Basketball"},
          {"category": "Electronics", "price": "$99.99", "stocked": true, "name": "iPod Touch"},
          {"category": "Electronics", "price": "$399.99", "stocked": false, "name": "iPhone 5"},
          {"category": "Electronics", "price": "$199.99", "stocked": true, "name": "Nexus 7"}
        ];

整體結構:

    <div className="fitlerProductTable" >
                  <SearchBar filterText={this.state.filterText}  inStockOnly={this.state.inStockOnly} onUserInput={this.handleUserInput}/> //藍色框
                  <ProductTable data={this.props.data}  filterText={this.state.filterText} inStockOnly={this.state.inStockOnly} />  //綠色框
                </div>

針對SearchBar

    <div className="SearchBar">
                    <input type="text" ref="filterTextInput"  placeholder="Search..." value={this.props.filterText} onChange={this.handleChange}/>
                    <p><input type="checkbox" ref="inStockOnly" checked={this.props.inStockOnly} onChange={this.handleChange}></input>
                    Only show products in stock</p>
                </div>

針對 ProductTable

  <table className="productTable">
          <thead>
          <tr><th>Name</th><th>Price</th></tr>
          {itemsList}    
          </thead>
        </table>

itemList :

var cata=null;
        var itemsList=[];
        var a=this.props.filterText;
        this.props.data.forEach(function(item){
        
            if(item.name.indexOf(this.props.filterText) ==-1 || (this.props.inStockOnly && !item.stocked)){
                return;
            }
            if(item.category !=cata){
                cata=item.category;
                itemsList.push(<CataRow catagory={cata}/>);
            }
            itemsList.push(<ProductRow productName={item.name} price={item.price} stocked={item.stocked}/>);
        },this);

其實也不是說其他架構不能實現,只是覺得React模組化更加清晰,一步一步定義,使整個模組看起來結構比較統一,也更好理解。

React 篇 Search Bar and content Table

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.