Den*_*gin 7 mobile android ios react-native react-navigation
在标题中有一个应用程序范围的搜索栏似乎是一项非常常见的任务。不幸的是,我还没有找到一些关于如何以正确的方式完成它的现成食谱。我的解决方案是使用headerTitle在 React Native Navigation 标头中放置一个自定义SearchBox组件:
static navigationOptions = ({navigation}) => {
headerTitle: () => (<SearchBox ... />)
Run Code Online (Sandbox Code Playgroud)
它有它的缺点,例如使用“静态”变量在应用程序和组件之间传递状态和行为。但到目前为止它有效。现在,在迁移到 RNN 4.1.1 后,它停止工作,因为在 RNN 中如何实现标头的细节:
TextInput 现在不会填充标题的宽度并且不能正确处理文本输入。
我正在寻找一种在 RN 中实现应用程序范围搜索栏的方法,它具有以下属性:
理想情况下,我正在寻找具有以下特征的答案:
你快完成了,但不幸的是,我认为这在react-navigation 4中是不可能的。在最新的5.0中,现在已经可以生产了,你必须重写你的堆栈。
在 5.0 中,您可以使用useFocusEffect来检测Back Actions。所以,你的标题是这样的:
function SearchBar(props) {
return (
<TextInput />
);
}
function StackScreen() {
return (
<Stack.Navigator>
<Stack.Screen
name="Home"
component={HomeScreen}
options={{ headerTitle: props => <SearchBar {...props} /> }}
/>
</Stack.Navigator>
);
}
Run Code Online (Sandbox Code Playgroud)
问题是,您必须在每个屏幕上重复选项并使用 FocusEffect 逻辑。
另一种方法可能是:
<View style={{ flex: 1 }}>
<MyAppbarHeader title={'PageA'} resetOnBack={false/true} />
<View style={{ flex: 1, margin: 8 }}>
<FlatList
data={someDataOnMyScreen}
renderItem={renderItem}
/>
</View>
</View>
Run Code Online (Sandbox Code Playgroud)
您MyAppbarHeader可以将标题作为道具传递,以及其他道具(例如resetOnBack)并在此功能组件中实现逻辑。
| 归档时间: |
|
| 查看次数: |
594 次 |
| 最近记录: |