【发布时间】:2018-07-31 20:45:12
【问题描述】:
我正在尝试创建一个简单的水平标签栏组件。如果用户单击选项卡,则容器会执行一些逻辑。
通过this.state在容器中跟踪标签状态。容器的道具之一是一个名为“选项”的数组。长度决定了标签栏中的标签数量。
constructor(props){
super(props)
var arrayWithTabs = []
var isSelected;
this.props.options.map((option, i) => {
if (option == this.props.selected){
isSelected = true
} else {
isSelected = false
}
var tabObject = {
optionName: option,
isSelected: isSelected
}
arrayWithTabs.push(tabObject)
})
this.state = {
options: arrayWithTabs,
}
每当用户点击时,handleClick 就会被触发:
updateState = (index,isSelected) => {
this.setState((prevState) => {
return update(prevState.options,{
[index]: {
isSelected:{$set: isSelected}
}
})
})
}
handleClick(e) {
this.state.options.map((option, i) => {
const isSelected = option.optionName == e.target.id;
this.updateState(i, isSelected);
})
}
componentDidUpdate(){
console.log(this.state.options)
}
为了处理我读到的 setState 的异步行为,你不应该直接从 this.state 中读取,而是在 setState 中创建一个函数来接收 prevState。
但是,当单击任何选项卡时,componetDidUpdate() 会返回以下内容:
[{optionName: "Tab1", isSelected: false}
{optionName: "Tab2", isSelected: false}]
【问题讨论】:
标签: javascript reactjs typescript