【问题标题】:Undefined redux props when refresh page in react刷新页面时未定义的redux道具反应
【发布时间】:2022-01-11 20:52:49
【问题描述】:

我在刷新页面时无法从 redux 获取数据

const [filters, setFilters] = useState<string[]>(props.filters);

useEffect(() => {
    (() => {
      if (!_.isEqual(filters, props.filters)) {
        setFilters(props.filters);
      }
    })();
});

我的过滤器是未定义的,即使当我检查 redux devtools 时,过滤器中有数据。 我需要在我的前面触发一个事件来显示我的过滤器。

请问有人有意见吗?

编辑:

(如果我点击页面中的任何元素,它会加载我的过滤器)

如果我在刷新时添加 setTimeout,它可以工作,但我不确定使用 setTimeout 是否是一种解决方案

useEffect(() => {
    setTimeout(() => {
       setFilters(props.filters);
    }, 1500);
  }, []);

【问题讨论】:

  • 据我了解,在页面刷新时,您的 redux 存储数据将设置初始值(如果您已分配)。您必须在应用程序加载之前持久化您的存储和检索。
  • 喜欢将其存储在本地存储中吗?
  • 如果您的数据不安全,您可以使用,否则您可以使用npmjs.com/package/redux-persist

标签: reactjs react-redux react-hooks refresh react-props


【解决方案1】:

可能你只是错过了返回内部函数:

或者直接拨打setFilters 喜欢:

useEffect(() => {
    if (!_.isEqual(filters, props.filters)) {
        setFilters(props.filters);
    }
});

【讨论】:

  • 我试图返回但没有任何变化,我仍然从 props.filters 得到一个未定义的值
  • @Srid_vgd 您现在可以查看更新的答案吗?另外,看看useEffect 的用法,以防你在那里遗漏了什么:reactjs.org/docs/hooks-effect.html
  • 我试着像你说的那样打电话给setFilters,它也可以工作(这减少了我的代码,谢谢!)但props.filters 仍然未定义。但是我确实将数据存储在我的 redux 中,但是当我重新加载我的页面时,我无法在 useEffect 中获取它。 (如果我点击页面中的任何元素,它会加载我的过滤器)
猜你喜欢
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
  • 2020-02-04
  • 2020-08-25
  • 2021-11-18
相关资源
最近更新 更多