相关文章推荐
失望的烈马  ·  SQL ...·  1 年前    · 

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement . We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account
  • I have searched the issues of this repository and believe that this is not a duplicate.
  • Version

    antd 3.10.1

    Environment

    macOS ; Google Chrome,Safari

    Reproduction link

    Steps to reproduce

    问题:代码中使用 CheckboxGroup(Checkbox.Group) Checkbox onChange 失效。

    import React from "react";
    import ReactDOM from "react-dom";
    import { Checkbox, message, version } from "antd";
    import "antd/dist/antd.css";
    import "./index.css";
    const CheckboxGroup = Checkbox.Group;
    const App = () => (
      <div className="App">
        <p>Current antd version: {version}</p>
          <CheckboxGroup>
            <Checkbox
              value="apple"
              onChange={e => {
                message.info(`${e.target.value}:${e.target.checked}`);
              apple
            </Checkbox>
          </CheckboxGroup>
    ReactDOM.render(<App />, document.getElementById("root"));
    

    What is expected?

    特殊场景下使用Checkbox.Group后,需要使用Checkbox的onChange事件。

    What is actually happening?

    使用Checkbox.Group后Checkbox的onChange失效。

    1、在地图类程序中需要分别控制多个图层的显示和隐藏(就是很多个Checkbox),Checkbox.Group的回调函数onChange只能获取到所有checked = true的选项,无法定位checked发生变动的项目。
    2、目前无法改动整体代码结构,只能考虑控件自带函数的使用。
    想到的解决办法
    1、允许Checkbox.Group内的Checkbox触发onChange
    2、Checkbox.Group的回调事件onChange除了checkedValue外,增加引发变动的对象e:Event

    在地图类程序中需要分别控制多个图层的显示和隐藏(就是很多个Checkbox),Checkbox.Group的回调函数onChange只能获取到所有checked = true的选项,无法定位checked发生变动的项目。

    看这个描述只需要 Checkbox.Group 的 onChange 就能实现了。只需要拿到所有 checked = true 的选项作为状态,相应显示对应的图层就可以了。

    在地图类程序中需要分别控制多个图层的显示和隐藏(就是很多个Checkbox),Checkbox.Group的回调函数onChange只能获取到所有checked = true的选项,无法定位checked发生变动的项目。

    看这个描述只需要 Checkbox.Group 的 onChange 就能实现了。只需要拿到所有 checked = true 的选项作为状态,相应显示对应的图层就可以了。

    首先,谢谢您对问题的跟进,我这边问题其实已经处理了,现在这个情况下有好几种解决方案的,我用的方式是保存事件发生前后的数据oldCheckedValue, checkedValue,然后查找差异项differenceValue,这是我目前想到的对其他项影响较小的方案。

    这个问题只是在我使用过程中发现的问题,我只是觉得如果组件支持以下两种方案的其中一种,可能会让组件可控性更高些。

    1、允许Checkbox.Group内的Checkbox触发onChange;
    2、Checkbox.Group的回调事件onChange除了checkedValue外,增加引发变动的对象e:Event;

    在地图类程序中需要分别控制多个图层的显示和隐藏(就是很多个Checkbox),Checkbox.Group的回调函数onChange只能获取到所有checked = true的选项,无法定位checked发生变动的项目。

    看这个描述只需要 Checkbox.Group 的 onChange 就能实现了。只需要拿到所有 checked = true 的选项作为状态,相应显示对应的图层就可以了。

    首先,谢谢您对问题的跟进,我这边问题其实已经处理了,现在这个情况下有好几种解决方案的,我用的方式是保存事件发生前后的数据oldCheckedValue, checkedValue,然后查找差异项differenceValue,这是我目前想到的对其他项影响较小的方案。

    这个问题只是在我使用过程中发现的问题,我只是觉得如果组件支持以下两种方案的其中一种,可能会让组件可控性更高些。

    1、允许Checkbox.Group内的Checkbox触发onChange;
    2、Checkbox.Group的回调事件onChange除了checkedValue外,增加引发变动的对象e:Event;

    您好,我有一个疑问,checkboxGroup 上的 onChange 事件,去改变某些图层的状态;单独加在某个 checkbox 上的 onChange 事件,也是去改变某个图层的状态,会冲突嘛?也就是说,点击了某个单独绑定了 onChange 事件的 checkbox,它的 onChange 事件会触发,但是 checkboxGroup 上的 onChange 事件也会触发吧?不知道您是怎么处理这个问题的?

    @guozhengzhongGit , 在 Group 下使用应该用 Group 的 onChange 做状态管理,Checkbox 的 onChange 可能会用于其他触发,但不应该参与状态管理。

    啊,意思是说,要改变 store 中的数据,只用 group 的 change 事件;如果有特殊的某个 checkbox 被点击有额外的操作,可以在它上面的 change 事件里完成哈