“React”复选框不会切换

前端之家收集整理的这篇文章主要介绍了“React”复选框不会切换前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我单击复选框时,复选标记不会消失,尽管onChange处理程序中的console.log指示状态更改为false.另一方面,当通过单独的按钮改变状态时,复选标记正确地切换和切换.
  1. export default class TestComponent extends Component {
  2.  
  3. constructor(props) {
  4. super(props);
  5. this.state = {
  6. is_checked: true
  7. };
  8. this.updateCheckBox = this.updateCheckBox.bind(this);
  9. this.pressButton = this.pressButton.bind(this);
  10. }
  11. updateCheckBox(event) {
  12. event.preventDefault();
  13.  
  14. this.setState({is_checked: !this.state.is_checked});
  15. console.log(this.state.is_checked); // This logs 'false' meaning the click did cause the state change
  16. console.log(event.target.checked); // However,this logs 'true' because the checkmark is still there
  17.  
  18. }
  19. pressButton(event){
  20. event.preventDefault();
  21. this.setState({is_checked: !this.state.is_checked});
  22. }
  23. render(){
  24.  
  25. return (
  26. <input type="checkBox" onChange={this.updateCheckBox} checked={this.state.is_checked} ></input>
  27. <button onClick={this.pressButton}>change checkBox state using button</button>
  28. );
  29. }
  30. }
我想我看到发生了什么.

您单击按钮,它将切换is_checked,它可以选中或取消选中该框.但是最终触发一个onChange的复选框,这也可以切换状态…你实际上编码了一个无限循环.虽然,由于React批次/ debounces setState操作,您的代码不会锁定您的页面.

尝试这个:

  1. var React = require("react");
  2.  
  3. var Component = React.createClass({
  4. getInitialState: function() {
  5. return {
  6. isChecked: true
  7. };
  8. },handleCheckBoxChange: function(event) {
  9. console.log("checkBox changed!",event);
  10. this.setState({isChecked: event.target.checked});
  11. },toggleIsChecked: function() {
  12. console.log("toggling isChecked value!");
  13. this.setState({isChecked: !this.state.isChecked});
  14. },handleButtonClick: function(event) {
  15. console.log("button was pressed!",event);
  16. this.toggleIsChecked();
  17. },render: function() {
  18. return (
  19. <div>
  20. <input type="checkBox" onChange={this.handleCheckBoxChange} checked={this.state.isChecked} />
  21. <button onClick={this.handleButtonClick}>change checkBox state using this button</button>
  22. </div>
  23. );
  24. }
  25. });
  26.  
  27. module.exports = Component;

请注意,您可以使用React的valueLink使此代码更干净(请阅读更多:https://facebook.github.io/react/docs/two-way-binding-helpers.html)

猜你在找的React相关文章