navigation.push在为react-native的抽屉导航的contentComponent中未定义

时间:2019-01-16 18:49:57

标签: react-native react-navigation react-navigation-drawer

反应导航版本:3.0.9

我在react-native的帮助下,通过以下代码在react-navigation中创建抽屉布局:

export default createDrawerNavigator(
  {
    Pin: {
      screen: PinScreen,
      navigationOptions: {
        drawerLockMode: 'locked-closed'
      }
    },
    ListView: { screen: ListViewScreen },
  },
  {
    initialRouteName: 'Pin',
    headerMode: 'none',
    contentComponent: props => <SideBar {...props} />
  }
);

在此SideBar组件中,我具有以下项触摸处理代码:

<ListItem
  style={styles.listItem}
  onPress={() => {
    this.props.navigation.dispatch(DrawerActions.closeDrawer());
    this.props.navigation.push('ListView');
  }}
>
  <Text>Home screen</Text>
</ListItem>

但是当我按下此项目时,我收到消息,提示this.props.navigation.push在此onPress处理程序中未定义。

导航后,我需要ListView屏幕刷新数据,现在将数据获取逻辑放入componentDidMount中。 push确实可以在其他屏幕上使用,但我认为传递给props的{​​{1}}是不同的。

所以问题:如上所述,如何从SideBar导航时如何使ListView屏幕重新装载/刷新数据?

3 个答案:

答案 0 :(得分:0)

请使用navigation.navigate()更改屏幕,如

onPress={()=> this.props.navigation.navigate("ListView")}

您可以在ListView组件中使用componentDidMount()。

答案 1 :(得分:0)

public class Test { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); DynamicDaoImpl dynamicDao = new DynamicDaoImpl(new DynamicRepository(new ArrayList<>())); DataInputOutputClass dataInputOutputClass = new DataInputOutputClass(br, dynamicDao); Driver dr = new Driver(br, dataInputOutputClass); dr.run(); } } 将通过navigation.push功能在导航后起作用。

因此,您首先需要先navigation.navigate,然后再navigation.navigate

答案 2 :(得分:-1)

您需要根据react-navigation的文档https://reactnavigation.org/docs/en/with-navigation.html; withp用withNavigation包装您的补充工具栏;

result = ['1', None, 's', '1']

for idx, item in enumerate(result):
    try:
        result[idx] = int(item)
    except:
        if item == 'None':
            result[idx] = None

>>> result
[1, None, 's', 1]