【问题标题】:Can't use onChange with react-bootstrap ToggleButtonGroup不能将 onChange 与 react-bootstrap ToggleButtonGroup 一起使用
【发布时间】:2018-01-16 10:13:16
【问题描述】:

所以我发现这个问题已经过去了几个小时,而且每分钟都在变得越来越奇怪。主要问题是我无法使 onChange 事件在 ToggleButtonGroup 上工作。

我的代码:

class ToggleButtonGroupControlled extends React.Component {                                                                                                                                  
    constructor(props, context) {                                                                                                                                     
        super(props, context);                                                                                                                                        

        this.state = {                                                                                                                                                
            value: [1, 3],                                                                                                                                            
        };

        this.onChange = this.onChange.bind(this);                                                                                                                                    
    }                                                                                                                                                                 

    onChange(value){                                                                                                                                                  
        alert(value);                                                                                                                                                 
        this.setState({ value });                                                                                                                                     
    };                                                                                                                                                                

    render() {                                                                                                                                                        
        return (                                                                                                                                                      
            <ToggleButtonGroup                                                                                                                                        
              type="checkbox"                                                                                                                                         
              value={this.state.value}                                                                                                                                
              onChange={this.onChange}                                                                                                                                
              >                                                                                                                                                       
              <ToggleButton value={1}>Checkbox 1 (pre-checked)</ToggleButton>                                                                                         
              <ToggleButton value={2}>Checkbox 2</ToggleButton>                                                                                                       
              <ToggleButton value={3}>Checkbox 3 (pre-checked)</ToggleButton>                                                                                         
            </ToggleButtonGroup>                                                                                                                                      
        );                                                                                                                                                            
    }                                                                                                                                                                 
}

现在,当我选择不同的“复选框”时,显示会相应更改,但不会触发警报。此外,通过 Chrome React 扩展检查组件显示状态没有改变,因此它作为一个不受控制的组件留下,因为永远不会执行 onChange 处理程序。

然而,奇怪的是,docs demo 中使用了相同的代码,并且它可以正常工作。另一个奇怪的事情是,在演示中,我可以使用 React Developer Tools 通过$r.props.onChange 修改 onChange 处理程序,而在我的测试中我不能。 ToggleButtonGroup 使用uncontrollable 返回一个不受控制的 版本的组件,该组件包装了好的组件。不受控制的包装器具有我通过道具传递的onChange,但受控组件具有来自uncontrollable 的某个setAndNotify 函数,并且无法删除。

我真的不知道可能是什么问题,因为我认为我已经放弃了所有合理的可能性,但我可能遗漏了一些明显的东西——我真的希望我是。

提前感谢您的宝贵时间。

【问题讨论】:

  • 你需要绑定你的onChange函数。
  • @AdamLeBlanc 是的,我忘记了,但这并不重要,因为问题是函数永远不会执行。

标签: javascript twitter-bootstrap reactjs react-bootstrap


【解决方案1】:

其他人也遇到此问题(请参阅this)。降级 react-boostrap 软件包版本应该可以工作

【讨论】:

  • 是的,我忘了检查已关闭的问题(尽管对我来说似乎没有解决(?))。无论如何,我将尝试降级。
  • 不出所料,它并没有完全奏效。看起来他们没有破坏任何东西,但它还没有正常/完全工作。事实上,他们刚刚修改了index.js 中的导出以包含这个模块,甚至不到一个月前就根据github.com/react-bootstrap/react-bootstrap/commit/…,所以它正在积极开发中,我很遗憾。无论如何,非常感谢您的宝贵时间。
猜你喜欢
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-20
  • 2021-08-21
  • 2020-03-09
  • 1970-01-01
  • 2018-12-25
相关资源
最近更新 更多