我怀疑
navigation.dispatch(CommonActions.reset())
正在重置状态,然后才能将其作为参数传递。
这是我的设置:
我定义了一个状态变量,例如:
const [quizID, setQuizID] = useState<string>("");
我有一个按钮可以重置导航堆栈,例如:
<Button onPress={() => {
console.log(quizID)
navigation.dispatch(
CommonActions.reset({
index: 1,
routes: [
{ name: 'HomeScreenWithDrawer' },
{
name: 'Quiz',
params: {quizID: quizID},
}],
})
);
}}/>
这会输出到控制台
<empty string>
。看来 quizID 只是通过包含调度代码而被重置,就像在调用调度之前重置一样,这意味着 quizID 不能作为参数传递。
我仅通过删除重置/调度部分来更改代码来测试它,例如:
<Button onPress={() => {
console.log(quizID)
}}/>
它会输出正确的测验ID。
那么为什么会发生这种情况,如何将状态变量作为 CommonActions.reset() 中指定的路由的参数传递?
在案例问题/解决方案中发布答案概括了过去的具体用法,可能会帮助其他人(因为我仍然不知道原因)。
这种将状态变量传递到重置路由参数的方法应该没有问题(经过测试和确认)。
问题与
@joaosousa/react-native-progress-steps
包中的 ProgressSteps 有关。我的调度代码嵌套在其中一个步骤中,但由于某种未知原因而不起作用。
作为解决方法,在某些状态变量上设置效果挂钩,例如:
const [viewQuiz, setViewQuiz] = useState(false);
useEffect(() => {
if(viewQuiz)
{
navigation.dispatch( (state: any) => {
return CommonActions.reset({
index: 1,
routes: [
{ name: 'HomeScreenWithDrawer' },
{
name: 'Quiz',
params: {quizID: quizID},
},
],
})
}
);
}
}, [viewQuiz]);
并在步骤组件中,调用
setViewQuiz(true);