上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖
楼主: bigonion - 

React 中setInterval 里setState 不变求助

[复制链接]
  • TA的每日心情
    开心
    2024-2-27 14:20
  • 签到天数: 88 天

    [LV.6]常住居民II

    22

    主题

    97

    回帖

    306

    积分

    荣誉开发者

    积分
    306

    油中2周年新人报道荣誉开发者生态建设者

    发表于 2023-4-21 02:44:15 | 显示全部楼层 | 阅读模式
    悬赏1油猫币未解决

    React 中setInterval 里setState值不变求助

    我好累

    最近在开发IOT展示页面,用React开发的
    image.png
    效果大概是这样的效果
    但是遇到了React一堆的问题,查资料有的用class有的用function,真头大

    问题是这样的
    首先用axios请求数据,我想把拿到手的数据作为props传给子组件,但是我发现tm压根不更新,查了说用Ref 也没啥用,真学不会了,求救......sos

    function App() {
      const [dataAll, setdataAll] = useState("/?"); 
      const dataAllRef = useRef(dataAll);
      useEffect(() =>{
        dataAllRef.current = dataAll;
      });
      useEffect(() => {
        const t = setInterval(() => {
          getData().then((e) => {
            let data = e.data;
            data = data.replace(/(\r)|(\?)/g, "");
            data = data.split(",");
            console.log(data);
            setdataAll(() => data);
            console.log(dataAll);
          });
        }, 4000);
    
        return () => {
          clearTimeout(t);
        };
      }, []);
    
      return (
        <>
          <div className="FLEX COL">
            <div className="FLEX ROW">
              <div className="MARGIN">
                <Calendar />
              </div>
              <div className="MARGIN">
                <div>
                  <Process dataAll={dataAll}></Process>
                </div>
                <div>
                  <Statisic dataAll={dataAll}></Statisic>
                </div>
              </div>
            </div>
          </div>
        </>
      );
    }
    export default App;
    
    function getData() {
      return new Promise((resolve) => {
        let axiosConfig;
        axiosConfig = {
          method: "get",
          url: "http://10.0.0.133/getdata",
        };
        axios(axiosConfig)
          .then((res) => {
            resolve(res);
          })
          .catch((error) => {
            console.log(error);
          });
      });
    }
    

    然后就是data死活不更新,总是停留在初值,大佬们帮看看(哭腔

  • TA的每日心情
    开心
    2024-2-27 14:20
  • 签到天数: 88 天

    [LV.6]常住居民II

    22

    主题

    97

    回帖

    306

    积分

    荣誉开发者

    积分
    306

    油中2周年新人报道荣誉开发者生态建设者

    发表于 2023-4-21 02:45:08 | 显示全部楼层
    请求的data 打印出来是正确的,但是dataAll是初值
    回复

    使用道具 举报

  • TA的每日心情
    开心
    6 小时前
  • 签到天数: 213 天

    [LV.7]常住居民III

    305

    主题

    4189

    回帖

    4056

    积分

    管理员

    积分
    4056

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2023-4-21 09:39:42 | 显示全部楼层
    clearTimeout 写错了 clearInterval

    不知道哥哥怎么写的子组件 我这样可以的
    https://codesandbox.io/s/ecstatic-wilson-7mdp5v?file=/src/App.js
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-2-27 14:20
  • 签到天数: 88 天

    [LV.6]常住居民II

    22

    主题

    97

    回帖

    306

    积分

    荣誉开发者

    积分
    306

    油中2周年新人报道荣誉开发者生态建设者

    发表于 2023-4-21 11:56:20 | 显示全部楼层
    王一之 发表于 2023-4-21 09:39
    clearTimeout 写错了 clearInterval

    不知道哥哥怎么写的子组件 我这样可以的

    太感谢gg了,问题解决了呜呜
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-2-27 14:20
  • 签到天数: 88 天

    [LV.6]常住居民II

    22

    主题

    97

    回帖

    306

    积分

    荣誉开发者

    积分
    306

    油中2周年新人报道荣誉开发者生态建设者

    发表于 2023-4-21 11:57:40 | 显示全部楼层
    王一之 发表于 2023-4-21 09:39
    clearTimeout 写错了 clearInterval

    不知道哥哥怎么写的子组件 我这样可以的

    还有一件事,clearTimeout 其实是可以清除interval的定时器的
    回复

    使用道具 举报

  • TA的每日心情
    开心
    6 小时前
  • 签到天数: 213 天

    [LV.7]常住居民III

    305

    主题

    4189

    回帖

    4056

    积分

    管理员

    积分
    4056

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2023-4-21 13:33:31 | 显示全部楼层
    bigonion 发表于 2023-4-21 11:57
    还有一件事,clearTimeout 其实是可以清除interval的定时器的

    一般都按标准的来
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表