javascript - 来自 api 响应的数组,没有收到 true 和 false 属性以在 React 中动态创建复选框
问题描述
我从 React-Redux Web 应用程序中的 api 结果创建了动态复选框,但问题是复选框结果没有在 onClick 上更新,设置了新状态。应该能够使用 setState 函数更新状态。
我尝试使用下面此链接中的解决方案,但它对我不起作用,因为我从 api 接收的有效负载不包含检查属性或真/假属性。
我收到的有效载荷如下:
flavors: Array(3)
0: {id: "1001", name: "Spicy"}
1: {id: "1002", name: "Hot"}
2: {id: "1003", name: "Mediterranean"}
应该填充哪个:
getInitialState = () => {
const initialState = {
customer: {
id: '',
firstName: '',
lastName: '',
email: ''
},
flavours: [] //Array to be populated, what is desired: {Spicy: false,
// Hot: false, Mediterranean: false}
// is populated currently as : Spicy, Hot,
// Mediterranean
},
return initialState;
}
从 api 和复选框处理程序方法获取有效负载:
getAllFlavours() {
const { dispatch } = this.props;
dispatch(userActions.getFlavours()).then((response) => {
var flavourList = [];
for (var i = 0; i < response.flavours.length; i++) {
flavourList.push(response.flavours[i].name);
}
this.setState({
flavours: flavourList,
});
});
}
handleCheckboxChange(event) {
const target = event.target;
const isChecked = target.checked;
const name = target.name;
this.setState({ flavours: { ...this.state.flavours, [name]:
isChecked } });
}
创建复选框方法:
render() {
let flavourCheckboxes = this.state.flavours.map((item, i) => {
return (<FormGroup key={i}>
<Col>
<Label key={i}>{item}</Label>
</Col>
<Col>
<Input key={i} name={item} type="checkbox" checked={item} onClick=
{this.handleCheckboxChange} />
</Col>
</FormGroup>)
});
return (
// other html tags
<CardBody>
<Row>
{flavourCheckboxes} // checkboxes created
</Row>
</CardBody>
// other html tags
我希望该复选框能够选中和取消选中在 onclick 触发时更新状态,但目前我检查了所有值并且您无法取消选中它们
注意:还尝试使用 defaultCheck 而不是检查 onClick 后会产生地图未定义错误
解决方案
在getAllFlavours
中,我不知道您是否应该从 api 接收已检查/未检查的值,但是在设置状态时,getAllFlavours
您可以将其设置为:
let flavourLists = { [name] : { isChecked : false } };
handleCheckboxChange
然后像这样覆盖检查的值:
this.setState({ flavours: { ...this.state.flavours ,[name] : { isChecked : true } } })
现在在渲染中相应地访问状态值。
推荐阅读
- kubernetes - Kubernetes 声明式管理和手动命令风险
- php - 为什么 JPGraph LinePlot SetStyle 绘制一条白线而不是指定的红色虚线?
- python - HEROKU 应用程序 ModuleNotFoundError:没有名为“numpy”的模块
- java - Weka 如何使用 StratifiedRemoveFolds 过滤器将数据集拆分为 70-30?
- php - Error Object of class stdClass could not be converted to int, trying to do a register in a store function Laravel 6.0
- python-3.x - 如何使用 Selenium 和 Python 在 url https://www.virustotal.com/gui/home/search 上传递搜索值
- javascript - Google Analytics conversion code not working
- php - 打印多个数组时获取特定数组数据
- rust - 如何从函数返回引用缓冲区和缓冲区的结构?
- swift - Swift Combine Subscriptions, right flow and architectural choices