这是我的功能,用于在平面列表中呈现项目
renderItem = ({ item }) => {
var integer = Number(item.key)
return (
<View>
<Text style={styles.row}>
{item.text}
</Text>
<View style={{flexDirection:'row'}}>
{this.createButtonYes(integer)}
{this.createButtonNo(integer)}
{this.answer(this.state.buttonStates[integer])}
</View>
<Text >__</Text>
</View>
)
}
我所面临的问题是buttonStates状态更改时未调用this.answer的功能
answer = (val) => {
if(val){
return(
<Text style={{fontSize:20}}>YES</Text>
)
}else if(val==false){
return(
<Text style={{fontSize:20}}>NO</Text>
)
}else{
return(
<Text style={{fontSize:20}}>Not Answered</Text>
)
}
}
我假设每次状态改变时都会调用该函数,但事实并非如此,有人解决方案吗?我想要的是每当按下按钮时状态都会发生变化,然后this.answer将采用更改后的状态并显示相应的状态。
谢谢
编辑: 按钮的代码:
buttonYesHelp = num =>{
const newItems = [...this.state.buttonStates];
newItems[num] = true;
return newItems
}
createButtonYes = (num) => {
return(
<TouchableOpacity style={styles.buttonYes}
onPress =
{
()=> {{this.setState({ buttonStates:this.buttonYesHelp(num) })}}
}>
<Text style={styles.buttonTextStyle}>YES</Text>
</TouchableOpacity>
)
}
num是我要在列表中更改的内容的索引
编辑: 我已经尝试了多种不同的方法,但是我一直遇到的问题是,当我渲染按钮时,我希望它对状态变量做出反应,但是即使状态发生变化,它也永远不会根据状态发生变化。 例如,在this.answer中,我假设它将根据buttonStates的状态返回文本,但它似乎只考虑了初始状态,而在之后没有任何作用
我能够使用具有相同语法的另一段代码来实现此目的,但是由于某些原因,这不起作用