javascript - 基于过滤器显示数据 - react 待办事项列表

标签 javascript reactjs

我正在尝试根据用户选择的过滤器显示我的待办事项列表。 目前,我编写的代码仅用于显示已完成。 但它不起作用。

请查看并说明为什么它不起作用

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;

最佳答案

变化:

1. 而不是 this.state.filter==='show_completed' 应该是 this.state.filter==='completed'.

2.if(item.completed)条件失败时,您需要返回null,否则将返回您所在的项目返回 if 条件之外。

这样写:

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

})}

更新:

从渲染方法调用一个函数并将整个 map 逻辑放入其中:

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>
    )
}

关于javascript - 基于过滤器显示数据 - react 待办事项列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44766215/

相关文章:

reactjs - React-DatePicker - 格式未定义

javascript - 将字符数组转换为字符串

javascript - 具有多个嵌套元素的按钮未在reactjs中返回正确的目标

javascript - 如何从指针访问对象?

javascript - jQuery .text() 返回的字符串的行为与字符串不同

node.js - 如何将前端添加到已部署的后端项目(相同的存储库)

javascript - 如何停止在 textInput React Native 中输入空格?

reactjs - React 应用程序拆分为 2 个应用程序

javascript - 使用 Feathers JS 4 和 Objection JS 进行预加载 - 无法读取未定义的属性 'get'

css - React - 基于 View 更改组件中文本的颜色