无法使用setState动态更改复选框的状态

时间:2015-05-14 02:16:11

标签: javascript reactjs setstate

下面是一个简单的反应组件,其初始状态为checkbox。

我正在尝试使用setState()动态更改它。这是行不通的。

这是我的代码:

        var Hello = React.createClass({
            getInitialState: function(){
                return {
                    checked : this.props.checked.toString() === "false" ? false : true
                };
            },
            render: function() {
            console.log("rendering==");
                return <div><input type = "checkbox" defaultChecked = {this.state.checked}/></div>;
            }
        });

        var compRef = React.render(<Hello checked = "false" />, document.body);

   Trying to change state after rendering the component

        setTimeout(function(){
        compRef.setState({checked: true})
        },3000);

我无法使用setState更改复选框状态。

这是fiddle

2 个答案:

答案 0 :(得分:2)

通过提供defaultChecked代替checked,您正在创建uncontrolled component不受控制表示您无法通过更改defaultChecked来控制它。 要从代码更改复选框的状态,您需要为其提供checked

这是更新的小提琴:http://jsfiddle.net/p4ps7nob/

要考虑的另一件事是:Props in getInitialState Is an Anti-Pattern

答案 1 :(得分:1)

如果您要切换复选框输入的状态,则需要将onChangedefaultChecked处理程序一起使用,而不是使用{{1}}。