我想在选中全部检查时检查/取消选中所有复选框,但无法使其正常工作。我使用的是材料-ui组件和redux-form。我的计划是使用formValueSelector API获取checkAll字段值,并根据该值设置复选框A和B值。也尝试使用价值道具,但仍然没有运气。
import React from 'react';
import { connect } from 'react-redux';
import { Field, reduxForm, formValueSelector } from 'redux-form';
import { Checkbox } from 'redux-form-material-ui';
let Form = (props) => {
return (
<form>
<Field name="checkAll" id="checkAll" label="Check All" component={ Checkbox } />
<Field name="a" label="A" component={ Checkbox } checked={ props.checkAll } />
<Field name="b" label="B" component={ Checkbox } checked={ props.checkAll } />
</form>
);
};
Form = reduxForm({
form: 'Form'
})(AddReturnModal);
// Decorate with connect to read form values
const selector = formValueSelector('Form'); // <-- same as form name
Form = connect(
(state) => {
const checkAll = selector(state, 'checkAll');
return {
checkAll
};
}
)(Form);
export default Form;
答案 0 :(得分:1)
您可以使用change
方法。 From docs:
更改(字段:字符串,值:任意):功能
更改Redux存储中字段的值。这是一个绑定的动作创建者,所以它什么都不返回。
我看到的唯一解决方案是遍历复选框列表并在其上调用change(checkboxName, value)
。
答案 1 :(得分:0)
@notgiorgi是正确的,要选中所有复选框,可以执行以下操作:
selectAll = () => {
const { change } = this.props
['a', 'b'].forEach((field) => change(field, true))
}
如果您希望进行切换,则可以轻松/便宜/无知地能够粗略地引用selectAll状态:
selectAllValue = false
selectAll = () => {
const { change } = this.props
['a', 'b'].forEach((field) => change(field, this.selectAllValue))
// toggle select all to select none
this.selectAllValue = !this.selectAllValue
}