问题描述
我正在使用 react-native 的 TouchableOpacity。代码是:
<TouchableOpacity onPress={onPress}>
<Text style={styles.supplementItem}>{item.item}</Text>
</TouchableOpacity>
其中 OnPress 函数为:
const onPress = () => (
// eslint-disable-next-line no-sequences
<Text style={styles.supplementItem}>Hello</Text>
this.setState({tempKey: tempKey + 1})
);
我看了看:this question 并尝试喜欢它。但这是行不通的。我将我的状态设置如下:
constructor(props) {
super(props);
this.state = {
tempKey: 0,};
}
请帮助我做错了什么。
解决方法
您提到的问题是使用基于函数的组件,而您正在使用基于类的组件,正如您展示的证明了这一点的构造函数部分。
所以 onPress
必须是您的情况下该类中的一个方法,因此您不需要在它之前使用 const
关键字,您需要以这种方式调用它; this.onPress
简而言之,你的整个组件应该是这样的;
import React from 'react';
import {Text,TouchableOpacity,View} from 'react-native';
class YourComp extends React.Component {
constructor(props) {
super(props);
this.state = {
tempKey: 0,show: false
};
}
onPress = () => {
// eslint-disable-next-line no-sequences
this.setState(prevState => ({tempKey: prevState.tempKey + 1}))
};
render() {
return (
<View>
<TouchableOpacity style={{height: 100,justifyContent: 'center',alignItems: 'center'}} onPress={() => this.onPress()}>
<Text>Hello (item.item in your case)</Text>
</TouchableOpacity>
<Text key={this.state.tempKey.toString()}>Hello {this.state.tempKey}</Text>
</View>
)
}
}
export default YourComp;
如果你想有条件地显示某个组件;
this.state = {
...,show: false
}
然后在onPress
方法中;
this.setState(prevState => ({show: !prevState.show})) // this will make <Text /> to toggle the modal when clicked.
然后在render方法中;
<Text>
{this.state.show && (
<YourNewComponent />
) || null}
</Text>