【发布时间】:2018-02-05 19:21:29
【问题描述】:
TouchableOpacity 组件有一个奇怪的问题。我有一个 MainButton 组件,它需要 2 个道具,item 和 disabled。基于 disabled 道具,我希望我的 MainButton 组件应用不同的样式。问题是当TouchableOpacity 组件重新渲染时,它不会刷新样式。重新渲染时正确设置了道具 disabled。
奇怪的是,如果我将其更改为 TouchableHeighlight,它会按预期工作。
有人知道为什么吗?这是 TouchableOpacity 中的错误吗?
import React, { Component } from 'react'
import UI from '../styles/ui'
import {
Text,
TouchableOpacity
} from 'react-native'
const ui = new UI()
const styles = ui.styles
class MainButton extends Component {
constructor (props) {
super(props)
this.state = {
disabled : props.disabled,
item: props.item
}
}
componentWillReceiveProps(props) {
this.setState({disabled:props.disabled})
}
render() {
var normalStyles = [styles.mainButton,styles.widthEighty]
var disabledStyle = [styles.mainButton,styles.widthEighty,styles.lowOpacity]
var correctStyles = this.state.disabled ? disabledStyle : normalStyles
console.log(this.state.disabled,'this.state.disabled ? ');
return (
<TouchableOpacity disabled={this.state.disabled} style={correctStyles} accessibilityLabel={this.state.item.name} onPress={this.state.item.onPress.bind(this)}>
<Text style={styles.mediumLabel}>{this.state.item.name}</Text>
</TouchableOpacity>
);
}
}
export { MainButton as default }
【问题讨论】:
-
你有没有弄明白这件事?我想知道它是否与 TouchableOpacity wrapping its children in an Animated.View 有关?动画没有及时完成还是什么?文档没有提到 TouchableHighlight 进行了类似的包装,但没有深入研究源代码进行检查!无论哪种方式,感谢 TouchableHighlight 提示!
-
我遇到了同样的问题,感谢您提供的高亮提示
-
您找到解决方案了吗?
标签: react-native touchableopacity touchablehighlight