2017-06-26 8 views
0

ユーザが選択したフィルタに基づいてtodolistを表示しようとしています。現時点では 、私は完了を示すためのコードを書いただけです。 が動作していません。フィルタベースのデータを表示するtodoリスト

見てみると、それは

import React,{Component} from 'react'; 
import './reminderListStyles.css'; 
import Filters from './Filters'; 

class ReminderList extends Component{ 
    constructor(){ 
     super(); 
     this.state={ 
      filter:"completed" 
     } 
    this.getFilter=this.getFilter.bind(this); 
    } 


    getFilter(x){ 
     this.setState({ 
      filter:x 
     }); 
     //alert(x); 
    } 

    render(){ 



     return(
      <div> 
      <ul> 
      {this.props.reminder.map((item)=>{ 

       if(this.state.filter==='show_completed'){ 
        if( item.completed){ 
         return <li key={item.id} 
       style={{textDecoration: item.completed? 'line-through':'none'}} 
       onClick = {()=>{this.props.onToggle(item.id)}} > 
       < input type="checkbox" checked={item.completed} />{item.text}</li> 
        } 

       } 

       return <li key={item.id} 
       style={{textDecoration: item.completed? 'line-through':'none'}} 
       onClick = {()=>{this.props.onToggle(item.id)}} > 
       < input type="checkbox" checked={item.completed} />{item.text}</li> 

      })} 
      </ul> 
      <Filters reminders={this.props.reminder} 
         filterState={this.getFilter} 
      /> 
      </div> 

      ) 
    } 
} 

export default ReminderList; 
+0

あなたは何を意味しますか問題は何か、状態は「完了」に設定されており、あなたは「show_completed」と比較しています。どのように正しく動作することを期待してください –

+0

ああ、はい!初期状態は完了に設定されます。 それを変更してみましょう。 しかし、私はそれが動作していないと言っている理由は、 それはまだ表示されていると両方を完了していないということです。 ノー完全 – faraz

答えて

1

変更働いていない理由を教えてください:

代わりのthis.state.filter==='show_completed'

を、それは this.state.filter==='completed'する必要があります。

2.あなたはそれ以外の場合は、あなたがif条件の外に戻ってきている項目を返します、if(item.completed)条件が失敗したときにnullを返却する必要があります。

このようにそれを書く:

{this.props.reminder.map((item)=>{ 

    if(this.state.filter === 'completed'){ 
     if(item.completed){ 
      return <li key={item.id} 
         style={{textDecoration: item.completed? 'line-through':'none'}} 
         onClick = {()=>{this.props.onToggle(item.id)}} > 
          <input type="checkbox" checked={item.completed} /> 
          {item.text} 
        </li> 
     } 
     return null  //here 
    } 

    return <li key={item.id} 
       style={{textDecoration: item.completed? 'line-through':'none'}} 
       onClick = {()=>{this.props.onToggle(item.id)}} > 
        <input type="checkbox" checked={item.completed}/> 
        {item.text} 
      </li> 

})} 

更新:

メソッドをレンダリングし、その内部でマップ全体のロジックを入れてから関数を呼び出します。

renderTodos(){ 

    return this.props.reminder.map((item)=>{ 
     if(this.state.filter === 'completed'){ 
      if(item.completed){ 
       return <li key={item.id} 
          style={{textDecoration: item.completed? 'line-through':'none'}} 
          onClick = {()=>{this.props.onToggle(item.id)}} > 
           <input type="checkbox" checked={item.completed} /> 
           {item.text} 
         </li> 
      } 
      else null; 
     } 

     return <li key={item.id} 
        style={{textDecoration: item.completed? 'line-through':'none'}} 
        onClick = {()=>{this.props.onToggle(item.id)}} > 
         <input type="checkbox" checked={item.completed}/> 
         {item.text} 
       </li> 

    })} 
} 

render(){ 
    return(
     <div> 
      <ul> 
       {this.renderTodos()} 
      </ul> 
      <Filters 
       reminders={this.props.reminder} 
       filterState={this.getFilter} 
      /> 
     </div> 
    ) 
} 
+0

をクリックして、しかしthis.state.filterの値は一つだけこれら3 SHOW_ALLの show_active iが、その場合は ''そのshow_completed' – faraz

+0

OHKをshow_completedことができても私は、 'show_completed'というステータスを持つべきこと全てをフィルタリングすることを提案しました。私はそれが正しく動作することを示唆した 'return null'を置くだけです。 –

+0

@farazコードによってcompleted'置き換える –

関連する問題