我试图将自定义标头注入到使用Hook的React功能组件。
所以例如我有一些带有一些钩子的React功能组件:
function StoryHome(props) {
const [communityObj, setCommunityObj] = useState({
uid: null,
name: null,
});
...
}
StoryHome.navigationOptions = {
title: 'Stories',
headerTitleStyle: {
textAlign: 'left',
fontFamily: 'OpenSans-Regular',
fontSize: 24,
},
headerTintColor: 'rgba(255,255,255,0.8)',
headerBackground: (
<LinearGradient
colors={['#4cbdd7', '#3378C3']}
start={{ x: 0, y: 1 }}
end={{ x: 1, y: 1 }}
style={{ flex: 1 }}
/>
),
headerRightContainerStyle: {
paddingRight: 10,
},
headerRight: (
<TouchableOpacity onPress={navigation.navigate('storiesList')}>
<Ionicons
name="ios-search-outline"
size={25}
color="white"
left={20}
/>
</TouchableOpacity>
)
};
export default StoryHome;
所以这种作品,除了TouchableOpacity
部分。
首先,我没有正确渲染Ionicon
,其次,我无法访问功能组件之外的navigation
对象。
我很想继续使用Hooks,但似乎无法想象这一个。
navigationOptions
可以是一个函数,它将一个对象作为参数与navigation
作为属性。
您还需要确保为onPress
提供函数,并且不要直接调用navigation.navigate
。
StoryHome.navigationOptions = ({ navigation }) => ({
title: "Stories",
headerTitleStyle: {
textAlign: "left",
fontFamily: "OpenSans-Regular",
fontSize: 24
},
headerTintColor: "rgba(255,255,255,0.8)",
headerBackground: (
<LinearGradient
colors={["#4cbdd7", "#3378C3"]}
start={{ x: 0, y: 1 }}
end={{ x: 1, y: 1 }}
style={{ flex: 1 }}
/>
),
headerRightContainerStyle: {
paddingRight: 10
},
headerRight: (
<TouchableOpacity onPress={() => navigation.navigate("storiesList")}>
<Ionicons name="ios-search" size={25} color="white" left={20} />
</TouchableOpacity>
)
});