2017-06-26 4 views
0

Ich versuche, meine Todolist basierend auf dem Filter anzuzeigen, den der Benutzer wählt. im Moment habe ich den Code für die Darstellung nur ausgefüllt geschrieben. aber es funktioniert nicht.Anzeigen von Daten basierend auf Filter - reagieren Todo-Liste

Bitte schauen und sagen, warum es nicht funktioniert

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

Was bedeuten Sie durch nicht funktioniert, was ist das Problem, auch der Zustand ist auf "abgeschlossen" eingestellt und Sie vergleichen mit "show_completed". wie erwartest du, dass es richtig funktioniert –

+0

ah, ja! Der Anfangszustand wird auf "abgeschlossen" gesetzt. Lassen Sie mich das ändern. aber der Grund, warum ich sage, dass es nicht funktioniert ist, dass es immer noch abgeschlossen und nicht beide abgeschlossen angezeigt wird. , auch wenn ich auf vollständige klicken – faraz

Antwort

1

Änderungen:

1. Statt this.state.filter==='show_completed' sollte this.state.filter==='completed' sein.

2. Sie müssen null zurückzukehren, wenn if(item.completed) Zustand ausfällt, sonst wird es das Einzelteil zurück, die Sie außerhalb von if Zustand zurückkehren.

schreiben es so:

{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> 

})} 

Update:

Aufruf eine Funktion von Verfahren machen und die gesamte Karte Logik im Inneren, dass setzen:

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

nein, aber die Werte von this.state.filter nur eine dieser drei show_all sein kann show_active show_completed – faraz

+0

ohk ich diesen Fall ersetzen 'schloss'ab von' show_completed' –

+0

@faraz Code, Ich schlug vor, alle Todo's zu filtern, die den Status 'show_completed' haben. Setzen Sie einfach eine "Return-Null", wie ich vorgeschlagen habe, wird es richtig funktionieren. –

Verwandte Themen