我想在设备方向改变时动态更改抽屉宽度。这是我的代码
updateWidth = (width) => {
this.setState({drawerWidth: width/2 });
}
调用componentDidMount
和onLayout
函数时调用updateWidth。
在drawerNavigator
声明中,我设置了drawerWidth: this.state.drawerWidth
。在这里我收到一个错误,告诉我drawerWidth: this.state.drawerWidth
未定义。我该如何解决这个问题?
修改 这是组件代码概述
const { width } = Dimensions.get('window');
const AppDrawer = DrawerNavigator(
{
Category: {
path: '/bla',
screen: bla,
},
},
{
drawerWidth: this.state.drawerWidth ,
contentComponent: test,
initialRouteName: 'tets',
contentOptions: {
activeTintColor: '#fd67d3',
},
}
);
const AppNavigator = StackNavigator({
...
})
class RootContainer extends Component {
constructor(props) {
super(props);
this.state = {
drawerWidth: 30
}
}
onLayout(e) {
const {width, height} = Dimensions.get('window')
this.updateWidth(width);
}
updateWidth = (width) => {
this.setState({drawerWidth: width/2 });
}
componentDidMount() {
this.updateWidth(width);
}
答案 0 :(得分:0)
您的抽屉组件是无状态组件。将其重新创建为基于类的组件,然后您可以在其中包含状态。无状态组件只能抓取传递给它们的道具,但它们不能存储任何状态。
答案 1 :(得分:0)
您需要在构造函数中初始化状态并使用有状态组件。
class AppDrawer extends Component {
constructor(props) {
super(props);
this.state = {
drawerWidth: 0 //or any other number
}
}