使用lodash的推拉替代收集复选框值

时间:2017-06-28 08:27:31

标签: javascript reactjs ecmascript-6

我想抛弃lodash并尽可能多地使用es6,其他方面做得很好,特别是我正在使用数组辅助方法,如map和spread真的有帮助,但我无法重构代码

onChangeCheckbox(e) {
    const { input } = this.props;

    const arr = input[ e.target.name ] || [];

    const checked = e.target.checked;
    if (checked) {
        arr.push(e.target.value);
    }
    else {
        pull(arr, e.target.value);
    }

    this.props.onChange( e.target.name, arr );
}

对我来说没关系,但是其他成员抱怨它难以阅读,任何线索如何让它变得更好?

1 个答案:

答案 0 :(得分:1)

您可以过滤数组,并将结果分配回arr:

arr = arr.filter((value) => value !== e.target.value)

反应最好更换,而不是变异,因为变化检测进行浅层比较,所以我也会替换Array#push

onChangeCheckbox(e) {
    const { input } = this.props;

    let arr = input[ e.target.name ] || [];

    const checked = e.target.checked;

    if (checked) {
        arr = [...arr, e.target.value];
    }
    else {
        arr = arr.filter((value) => value !== e.target.value)
    }

    this.props.onChange( e.target.name, arr );
}