javascript - 使用从 react 组件中的函数返回的值(自动更新)

标签 javascript reactjs

我希望使用从此函数返回的值:

const quantity = () => {
    let cookies = document.cookie.split("?");
    return cookies.length;
}

在我的 react 组件中:

const cart_button = (
    <Mfont>{quantity}</Mfont>
);

<Mfont>是一个标准的 span 元素,使用 styled-components 进行样式设置;

console.log(cookies.length)

根据预期的长度给了我一个数字,但我不知道如何将其插入到我的组件中并在每次 cookie.length 时更新增加。

最佳答案

根据this answer ,2019 年检测 cookie 更改的最可靠方法仍然是检查 document.cookie on interval .

在 React 16.8 中,我们有 useEffect hook我们可以与 useState hook 一起使用定期运行一个函数,并在 document.cookie 的值更新时导致组件更新,例如

import React, { useState, useEffect } from 'react';

const MyComponent = props => {
  const [latestCookie, setLatestCookie] = useState(document.cookie);

  useEffect(() => {
    const detectCookieUpdate = document.cookie !== latestCookie && setLatestCookie(document.cookie);
    const interval = window.setInterval(detectCookieUpdate, 1000);

    return () => window.clearInterval(interval);
  });

  return (
    <Mfont>{quantity()}</Mfont>
  );
};

这样,我们每 1 秒运行一个函数来检查 document.cookie 的值是否等于之前的值。由于该值始终是一个字符串,因此使用严格比较运算符 === 是安全的,并且在此基础上不进行任何检查。当值不匹配时,我们运行状态钩子(Hook)提供的 setLatestCookie ,导致组件再次渲染,因此使用将再次运行的 quantity 函数。

关于javascript - 使用从 react 组件中的函数返回的值(自动更新),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56568857/

相关文章:

javascript - 如何制作这个正则表达式?

javascript - 如何在 jquery 中正确使用 $ ("body").scrollTop() ?

javascript - React + Redux 应用程序中长时间运行的进程位于何处?

javascript - React Hooks 中用于历史推送的等价构造函数 Prop

javascript - 如何禁用 react-admin 的自动刷新功能

javascript - 我的组件如何在不重复代码的情况下在另一个组件中工作?

javascript - 从字符串创建 react 组件

javascript - 如何在 ng-include 中访问 ng-repeat 的 $parent

javascript - 如何在不使用 iframe 的情况下在页面上显示博客?

javascript - ./app/main.js 中的错误模块构建失败 : SyntaxError: Unexpected token (10:18)