我创建了这个简单的TODO列表,当我想检查复选框时我不能。
import React from 'react';
const TodoItem = React.createClass({
render() {
return (
<div>
<span>{this.props.todo}</span>
<input type="checkbox" checked={this.props.done} />
</div>
);
}
});
export default TodoItem;
父母:
import React from 'react';
import TodoItem from './TodoItem';
import AddTodo from './AddTodo';
const TodoList = React.createClass({
getInitialState() {
return {
todos: [{
todo: 'some text',
done:false
},{
todo: 'some text2',
done:false
},
{
todo: 'some text3',
done:true
}]
};
},
addTodo (childComponent) {
var todoText = childComponent.refs.todoText.getDOMNode().value;
var todo = {
todo: todoText,
done:false
};
var todos = this.state.todos.concat([todo]);
this.setState({
todos:todos
});
childComponent.refs.todoText.getDOMNode().value = '';
},
render() {
var Todos = this.state.todos.map(function(todo) {
return (
<TodoItem todo={todo.todo} done={todo.done} />
)
});
return (
<div>
{Todos}
<AddTodo addTodo={this.addTodo}/>
</div>
);
}
});
export default TodoList;
答案 0 :(得分:42)
如果您未在输入中指定onChange
处理程序,则React会将输入字段呈现为只读。
getInitialState() {
return {
done: false
};
}
和
<input type="checkbox" checked={this.state.done || this.props.done } onChange={this.onChange} />
答案 1 :(得分:7)
这是谷歌的最高点之一,因为反应组件没有更新&#34;所以尽管答案已被广泛接受,但我认为这可能会产生误导。
checkbox
类型不需要onChange
。自答案公布后我不确定这是否有所改变(当前版本的React是v15 - 2016-04-20)。
请参阅以下示例,在没有onChange处理程序的情况下工作(请参阅JSBIN):
class Checky extends React.Component {
render() {
return (<input type="checkbox" checked={this.props.checked} />);
}
}
class App extends React.Component {
constructor(props) {
super(props);
this.state = { checked: true };
}
render() {
return (
<div>
<a href="#" onClick={ () => { this.setState({ checked: !this.state.checked }); }}>Toggle</a>
<hr />
<Checky checked={this.state.checked} />
</div>
);
}
}
React.render(<App />, document.body);
另一个注意事项 - 很多答案(针对类似问题)只是推荐&#34; defaultChecked&#34; - 虽然这有效,但通常只有一半。
答案 2 :(得分:6)
只为其他来这里的人。现在,React提供了ln -sf .myWinterBashrc ~/.bashrc
:
defaultChecked