javascript - React - 如何实现复选框?

标签 javascript reactjs

我正在创建一个 ToDo 应用来自学 React。

为我的任务实现复选框功能的最佳方式是什么?我对放置它的最佳位置以及使用状态感到困惑。

就我现在的代码而言,该复选框不会打开,因为它绑定(bind)到我的数据,而不是状态。另外,我需要为复选框创建一个新的 React 类吗?我感谢任何帮助。

var ToDoContainer = React.createClass({
    getInitialState: function(){
        return {
            name:"Michael",
            tasks:[
                {task:"Go to the gym", completed:false}, 
                {task:"Do yoga", completed:false},
                {task:"Buy groceries", completed:true},
                {task:"Get tire fixed", completed:false}
            ]
        }
    },
    addTask: function(task){
        this.setState({
            tasks:this.state.tasks.concat(task) 
        }); 
    },
    markComplete: function(task){
        console.log('markComplete');
        console.log(task);
    },
    render: function(){

        return (
            <div>
                <h3>Name: {this.state.name}</h3>
                <TaskList tasks={this.state.tasks} check={this.markComplete}/>
                <AddTask addNew={this.addTask} />
            </div>
        )
    }
});

var TaskList = React.createClass({
    handleCheck: function(e){
        console.log('check');
        this.props.check(e.target);
    },
    render: function(){
        var that = this;

        var task = this.props.tasks.map(function(task, index){
                return <li key={index} className={task.completed ? "complete" : "incomplete"} >
                            <input type="checkbox" checked={task.completed} onChange={that.handleCheck} />
                            {task.task}
                        </li>
        });

        return (
            <div>
                <ul>
                    {task}
                </ul>
            </div>
        )
    }
});

var AddTask = React.createClass({
    getInitialState: function(){
        return{
            newTask:""
        }
    },
    handleChange: function(e){
        this.setState({
            newTask:e.target.value
        });
    },
    handleSubmit: function(e){
        e.preventDefault();
        this.props.addNew({task:this.state.newTask, completed:false});
        this.setState({
            newTask:""
        });
    },
    render: function(){
        return (
            <div>
                <form onSubmit={this.handleSubmit}>
                    <input type="text" value={this.state.newTask} onChange={this.handleChange} />
                    <button disabled={this.state.newTask == ""}>Add Task</button>
                </form>
            </div>
        )
    }
});

ReactDOM.render(, document.getElementById('app'));

最佳答案

首先在TaskList组件中,您可以直接使用 Prop 中的事件,例如

 <input type="checkbox" checked={task.completed} onChange={that.props.check} value={task.task} />

以及您的 Markcomplete 方法

markComplete: function(e){
    console.log('markComplete');
    var TempTask=this.state.tasks;
    for(int i=0;i<=TempTask.length;i++)
      {
          if(TempTask[i].task==e.target.value)
          {
              if((e.target).checked) 
               {
                 TempTask[i].completed=true;  
               }
              else
               {
                 TempTask[i].completed=false;
               }
          }
      }
    this.setState({this.state.tasks:TempTask});
},

关于javascript - React - 如何实现复选框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34603581/

相关文章:

javascript - 使用按钮在可见和隐藏之间切换

javascript - 获取 React JS 私有(private)方法的最佳实践是什么?

javascript - React 组件利用率

android - 使用 react-native 营造轻松的氛围?

javascript - 如何在服务器端呈现时禁用或阻止 ReactJS 查找文档?

javascript - 如何获取数组的第一个元素?

javascript - 使用 ID 或 CLASSNAME 在另一个元素之前插入一个元素

javascript - 访问 react-select 中的内部输入元素

reactjs - 如何在React响应式轮播中使用renderArrowPrev来实现下一个和上一个功能?

javascript - 如何在动态创建的表中添加 'style'?