Reactjs 反应本机设置状态不重新渲染

Reactjs 反应本机设置状态不重新渲染,reactjs,react-native,state,render,Reactjs,React Native,State,Render,该组件的预期行为如下:我按下它,调用selectedCapacity()函数,更新状态,使其现在以不透明度=1进行渲染 但由于某些原因,在调用this.setState后,不会重新呈现它。我必须再次单击该组件,使其重新渲染,并从状态应用不透明度更改 export default class Category extends Component { state = { opacity: 0.5 } selectedOpacity() { // some stuff this.set

该组件的预期行为如下:我按下它,调用selectedCapacity()函数,更新状态,使其现在以不透明度=1进行渲染

但由于某些原因,在调用this.setState后,不会重新呈现它。我必须再次单击该组件,使其重新渲染,并从状态应用不透明度更改

export default class Category extends Component {

state = {
  opacity: 0.5
}

selectedOpacity() {
  // some stuff
  this.setState({opacity: 1})
}

render() {
 return(
  <TouchableOpacity style={[styles.container, {opacity: this.state.opacity}]} onPress={() => {
    this.selectedOpacity();
  }}>
  </TouchableOpacity>
 )
}
导出默认类类别扩展组件{
状态={
不透明度:0.5
}
选择性产能(){
//一些东西
this.setState({opacity:1})
}
render(){
返回(
{
这是。SelectedCapacity();
}}>
)
}
尝试更改,然后按至
onPress={()=>this.selectedOpacity()}
selectedOpacity更改为箭头函数:

selectedOpacity = () => {
  this.setState({opacity: 1})
}
然后:


编辑:react文档说明了它的实验性语法

我认为您缺少的是selectedCapacity()的绑定,否则
这个
可能会在其中未定义

另外,最好将状态赋值移动到构造函数()

也可以更改为以下内容,因为


缺少
constructor()
的可能重复项,因此使用TouchableOpacity在该场景中似乎存在错误,但有没有办法避免此错误并仍然使用TouchableOpacity?没有任何更改,仍然没有更新first clickrender@leighton
onPress={()=>this.selectedCapacity()}
onPress相同={this.selectedOpacity}
是的,对不起-我的错如果不绑定,这在箭头函数中可能是未定义的。@KiranMathewMohan您以前试过吗?我认为您完全错了是的。“arrow函数表达式是正则函数表达式的一种语法紧凑的替代方法,尽管它没有自己对this、arguments、super或new.target关键字的绑定。”Ref:@KiranMathewMohan严重吗?世界上很多人都在使用arrow函数而不是绑定(ES6)请阅读这篇文章,你可以用谷歌搜索。我不想和你争论。我们可以在这里结束讨论。
onPress={this.selectedOpacity}
constructor(props) {
    super(props);
    this.state = {};
    this.selectedOpacity = this.selectedOpacity.bind(this);
}
onPress={this.selectedOpacity}