如何将状态变量作为 CommonActions.reset() 中指定的路由的参数传递?

问题描述 投票:0回答:1

我怀疑

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() 中指定的路由的参数传递?

react-native react-navigation react-native-navigation
1个回答
0
投票

在案例问题/解决方案中发布答案概括了过去的具体用法,可能会帮助其他人(因为我仍然不知道原因)。


这种将状态变量传递到重置路由参数的方法应该没有问题(经过测试和确认)。

问题与

@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);

© www.soinside.com 2019 - 2024. All rights reserved.