首页 > 解决方案 > 为什么我的 React 本机 route.params 保存以前的路由数据?

问题描述

让我们考虑一下我有一个项目列表[a,b,c,d,e,f ....]

我现在正在做的是列出它们,当我单击对象时,a我将转到详细信息a,当我单击时,b我将转到b

事情是这样的

对于清单,我得到了 1 个 api,对于详细信息,我得到了另一个 api。因此,每当我导航到详细信息组件时,我都会使用 useEffect 挂钩来调用该特定项目的详细信息数据。

代码看起来像这样

const {
    id,
    name,
    number,
    shortDescription,
  } = route.params.info;

  useEffect(() => {
    const unsubscribe = navigation.addListener('focus', () => {
      axios
        .get(`${baseUri}/getproducts?productid=${id}`)
        .then((res) => {
          setEquipments(res.data[0].Equipments);
          setDisplayTab('description');

          console.log('------------------------');
          console.log(res.data[0].id);
          console.log('------------------------');

          if (res.data[0]?.Variants === undefined) {
            alert('Undefined');
            setChooseVariantState(false);
          } else {
            alert('Greater than 1');
            setChooseVariantState(true);
          }
        })
        .catch((err) => {
          console.log(err);
        });
    });
    return unsubscribe;
  }, [navigation]);

如您所见,我正在使用id来自route params.

问题是,在转到A项目后,再转到项目B,console.log 将始终显示A. 它没有更新到B,但是在渲染项目时,它正在渲染正确的项目。

即使去项目C,D,E ...控制台总是会显示A,我认为 route.params 正在保存用户去的第一个项目的信息

这是为什么?

标签: reactjsreact-native

解决方案


推荐阅读