推送导航不适用于来自 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
为什么!?有什么想法吗?
我还没有找到任何标准解决方案。最后我决定开发一个补丁暂时解决这个问题:
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 };
};