我有两个按钮,它们像这样调用相同的函数:
这个按钮是在 useEffect 中创建的。
useEffect(() => {
navigation.setParams({
TopRightButton: (
<ConfirmButton
callback={() => ApiCall()}
/>
),
});
}, []);
这是渲染中的第二个按钮
<TouchableOpacity onPress={()=> ApiCall()}><Text>Add</Text></TouchableOpacity>
这是函数:
const ApiCall = () => {
console.log('name', Name);
};
我使用 useState 更改名称。当我单击第二个按钮 TouchableOpacity 时,它会显示我的名字。但是,当我单击在 useEffect 中创建的第一个按钮时,没有任何反应。我的意思是,名称为空。为什么会这样?
有什么建议吗?
编辑:
const [Name, setName] = useState('');
答案 0 :(得分:1)
你会尝试这种方式吗?
const ApiCall = () => {
console.log('name', Name);
};
useEffect(() => {
navigation.setParams({
TopRightButton: (
<ConfirmButton
callback={() => ApiCall()}
/>
),
});
}, [Name]);
答案 1 :(得分:0)
您应该提供有关第一个按钮的更多信息,我猜它是您想显示在堆栈导航器标题右侧的按钮,如果是这种情况,您应该不要使用 { {1}}。
如果您想配置您的导航器,您应该使用 setParams
。
因此,在您想要在其标题中添加按钮的屏幕中,您必须改为在 navigationOptions
内调用 setOptions
。查看 docs 以了解有关如何实现这一目标的更多信息。