反应导航版本: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
屏幕重新装载/刷新数据?
答案 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]