expo router.push 参数不适用于动态值

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

推送导航不适用于来自 Formik 的

values
,但如果我静态通过,则可以使用。

不起作用

const handleSubmit = (values) => {
  SMSLogin({ variables: values }).then(({ data, errors }) => {
    console.log(values.phone)
    router.push({
      pathname: "/sign-up-completion",
      params: {
        phone: values.phone,
      },
    });
  });
};

但是这是工作

const handleSubmit = (values) => {
  SMSLogin({ variables: values }).then(({ data, errors }) => {
    console.log(values.phone)
    router.push({
      pathname: "/sign-up-completion",
      params: {
        phone: '+1 (920) 123-4567',
      },
    });
  });
};

两个

console.log
都正确显示了
phone

为什么!?有什么想法吗?

  • 世博 SDK 49
  • 世博路由器2.0.0
react-native expo react-navigation expo-router
1个回答
0
投票

我还没有找到任何标准解决方案。最后我决定开发一个补丁暂时解决这个问题:

import { setParams } from "@src/redux/slice/paramsSlice";
import { useRouter } from "expo-router";
import { useDispatch } from "react-redux";

type PropsType = {
  pathname: string;
  params?: object;
};

export const usePatchedRouter = () => {
  // TODO: fix expo-router bug described in
  // https://stackoverflow.com/questions/77370412/expo-router-push-params-not-working-with-dynamic-values
  // I'm forced to use redux

  const router = useRouter();
  const dispatch = useDispatch();

  const push = ({ pathname, params = {} }: PropsType) => {
    // patch expo-router pass params handling by redux
    dispatch(setParams(params));

    router.push({
      pathname: pathname,
      params: params,
    });
  };

  return { ...router, push };
};

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