如何根据状态更新反应导航 5 headerRight 中的文本?
How can text in a react navigation 5 headerRight be updated based on state?
当用户单击 react-navigation 5 headerRight 中的 'Edit' 按钮时,我希望文本切换为显示 'Done',但似乎是导航选项。无权访问当前状态。如何更新才能正常工作?
import React, {useState, useLayoutEffect} from 'react';
import { TouchableWithoutFeedback, View, Text } from 'react-native';
export default function ListScreen({navigation}){
const [editMode, setEditMode] = useState(false);
useLayoutEffect(() => {
navigation.setOptions({
headerRight: () => (
<TouchableWithoutFeedback onPress={() => setEditMode(!editMode) }>
<Text>{editMode ? 'Done' : 'Edit'}</Text>
</TouchableWithoutFeedback>
),
});
}, [navigation]);
return (....)
}
您没有将 editMode 作为 layoutEffect 挂钩的依赖项传递。
没有它,只有当 'navigation' 参数改变时,钩子才会 运行。像下面这样更改。
useLayoutEffect(() => {
navigation.setOptions({
headerRight: () => (
<TouchableWithoutFeedback onPress={() => setEditMode(!editMode) }>
<Text>{editMode ? 'Done' : 'Edit'}</Text>
</TouchableWithoutFeedback>
),
});
}, [navigation,editMode]);
当用户单击 react-navigation 5 headerRight 中的 'Edit' 按钮时,我希望文本切换为显示 'Done',但似乎是导航选项。无权访问当前状态。如何更新才能正常工作?
import React, {useState, useLayoutEffect} from 'react';
import { TouchableWithoutFeedback, View, Text } from 'react-native';
export default function ListScreen({navigation}){
const [editMode, setEditMode] = useState(false);
useLayoutEffect(() => {
navigation.setOptions({
headerRight: () => (
<TouchableWithoutFeedback onPress={() => setEditMode(!editMode) }>
<Text>{editMode ? 'Done' : 'Edit'}</Text>
</TouchableWithoutFeedback>
),
});
}, [navigation]);
return (....)
}
您没有将 editMode 作为 layoutEffect 挂钩的依赖项传递。 没有它,只有当 'navigation' 参数改变时,钩子才会 运行。像下面这样更改。
useLayoutEffect(() => {
navigation.setOptions({
headerRight: () => (
<TouchableWithoutFeedback onPress={() => setEditMode(!editMode) }>
<Text>{editMode ? 'Done' : 'Edit'}</Text>
</TouchableWithoutFeedback>
),
});
}, [navigation,editMode]);