react-native navigationOptions中不能获取this、state
场景:在createStackNavigator路由过来的页面,navigationOptions的header中添加搜索框
如下图:
static navigationOptions = {
headerStyle: {backgroundColor: '#0086f1'},
headerTitle: (
<TextInput placeholder={'请输入搜索内容'}
onChangeText={(text) => this.setState({'str': text})
};
constructor(props) {
super(props);
this.state = ({
str: ''
})
};使用this.setState的时候出现如下错误:
因为this对象为null,所以找不到setState方法
解决办法:外部引用
在最外部申明:
let that;
在class内部赋值
constructor(props){
super(props);
that = this;
}完整代码:
let that;//外部申明
export default class MinePage extends Component<Props> {
static navigationOptions = {
......
};
constructor(props) {
super(props);
that=this;
this.state = ({
str: ''
})
};
render() {
return (
<View style={styles.container}>
//使用外部申明变量
<Text>{that.state.str}</Text>
</View>
);
}
}
textInput在android中,如果字体大小太小,垂直方向无法居中
解决办法:在textInput中的设置padding: 0
react-native 在ios中,图片不显示的问题
解决办法:
在node_modules/react-native/Libraries/RCTUIImageViewAnimated.m中273行修改以下代码:
# 修改前:
- (void)displayLayer:(CALayer *)layer
{
if (_currentFrame) {
layer.contentsScale = self.animatedImageScale;
layer.contents = (__bridge id)_currentFrame.CGImage;
}
}
# 修改后:
- (void)displayLayer:(CALayer *)layer
{
if (_currentFrame) {
layer.contentsScale = self.animatedImageScale;
layer.contents = (__bridge id)_currentFrame.CGImage;
} else {
[super displayLayer:layer];
}
}