reactjs - React Native 搜索栏与 react-navigation
问题描述
我想在我的标题中添加一个搜索栏。我正在使用 react-navigation,并希望创建如下 2 张图片中的效果。当您按下搜索图标时,汉堡包图标变为箭头图标,标题标题变为搜索字段。我曾尝试使用 navigationOptions 来完成此操作,但问题是它是静态的,并且在标题本身发生操作时无法更新。因此,为了试验我想要完成的是,当按下搜索图标时,汉堡包图标变成了一个箭头返回图标。谢谢!
var search = false;
const menuButton = navData => (
<HeaderButtons HeaderButtonComponent={HeaderButton}>
<Item
title="Menu"
iconName="ios-menu"
onPress={() => {
navData.navigation.toggleDrawer();
}}
/>
</HeaderButtons>
);
const goBackButton = navData => (
<HeaderButtons HeaderButtonComponent={HeaderButton}>
<Item
title="Menu"
iconName="ios-arrow-back"
onPress={() => {
search=false
}}
/>
</HeaderButtons>
);
MyScreen.navigationOptions = navData => {
return {
headerTitle: 'My title',
headerLeft: search ? goBackButton : menuButton(navData),
headerRight: (
<BorderlessButton
onPress={() => search=true}
style={{ marginRight: 15 }}>
<Ionicons
name="md-search"
size={Platform.OS === 'ios' ? 22 : 25}
/>
</BorderlessButton>
)
}
};
解决方案
我已经通过使用 setParams 和 getParam 将信息传递给我的 navigationOptions 来修复它。我面临的唯一问题是无限循环,我可以通过正确使用 useEffect 和 useCallback 来解决。
const MyScreen = props => {
const dispatch = useDispatch();
var search = useSelector(state => state.verbs.search);
useEffect(() => {
props.navigation.setParams({search: search});
}, [search]);
const toggleSearchHandler = useCallback(() => {
dispatch(toggleSearch());
}, [dispatch]);
useEffect(() => {
props.navigation.setParams({toggleSearch: toggleSearchHandler});
}, [toggleSearchHandler]);
return (<View> ...
</View>
);
};
MyScreen.navigationOptions = navData => {
const toggleSearch = navData.navigation.getParam('toggleSearch')
return {
headerTitle: 'Verbs',
headerLeft: navData.navigation.getParam('search') ? gobackButton : menuButton(navData),
headerRight: (
<HeaderButtons HeaderButtonComponent={HeaderButton}>
<Item
title="Menu"
iconName="ios-star"
onPress={toggleSearch}
/>
</HeaderButtons>
)
}
};
推荐阅读
- javascript - 使用 createProxyMiddleware 重写动态路径并创建反应应用程序
- lua - Roblox 上的大亨游戏
- sql-server - SQL Server 表的主键上的 int 值用完
- javascript - 如何在模型属性中查询同一模型的对象
- sql - 我在所有列、表中都有唯一或不同的记录
- tensorflow - Keras 数据生成器预测相同数量的值
- javascript - 如何在nodejs mongoose中将此回调身份验证转换为Promise
- flutter - 如何在颤动中更改TextField光标颜色
- javascript - 如何获取 Javascript 对象键作为没有字段的字符串
- pointers - memmove 实现在复制字符数组时引发分段错误