【问题标题】:AnyOne know why i keep getting This error when i try to set state on load任何人都知道为什么我在尝试设置加载状态时不断收到此错误
【发布时间】:2019-08-13 05:31:09
【问题描述】:

我不断收到此错误我试图在加载之前不显示图像,但我得到 React 限制渲染数量以防止无限循环。如果您知道更好的方法,请告诉我。我希望图像在加载时不显示...加载图像非常难看,而且它只发生在 Mobile Im 上使用 .Png 文件我应该转换为 svg 以便加载更快吗?

        Too many re-renders. React limits the number of renders to prevent an infinite loop.
        ▶ 2 stack frames were collapsed.
        Spinner
        C:/Users/Test/Documents/GitHub/Ecommerce-Store/src/components/Spinner.jsx:26
        23 | return (
        24 |   <div style={{ height: '100vh' }}>
        25 |     <img
        > 26 |       onLoad={setloaded('true')}
            | ^  27 |       id="preloader"
        28 |       src={preloader}
        29 |       alt="loading..."

        import React, { useEffect, useState } from 'react';
        import { isAndroid, isIOS } from 'react-device-detect';
        import android from '../spinners/androidlogo.png';
        import apple from '../spinners/Applelogo.png';
        import spinner from '../spinners/VHUBLogospin.gif';

        const Spinner = props => {
        const [preloader, setpreloader] = useState(null);
        const [loaded, setloaded] = useState(false)
        // const productConsumer = useContext(ProductContext);
        // // const { showSpinner } = productConsumer;
        useEffect(() => {
            if (isIOS) {
            setpreloader(apple);
            } else if (isAndroid) {
            setpreloader(android);
            } else {
            setpreloader(spinner);
            }
            // showSpinner(preloader);
        }, []);

        return (
            <div style={{ height: '100vh' }}>
            <img
                onLoad={setloaded('true')}
                id="preloader"
                src={preloader}
                alt="loading..."
                style={{
                width: '200px',
                margin: 'auto',
                display: 'block',
                marginTop: '3%',
                paddingTop: '25vh',

                }}
                className={!loaded ? 'display-none' : '' }
            />
            </div>
        );
        };

        export default Spinner;

【问题讨论】:

  • 那是因为您正在设置加载状态onLoad={setloaded('true')。每次状态更改时,DOM 都会重新渲染,并在加载时再次尝试设置状态,然后 DOM 将再次重新渲染。因此它将进入无限循环。您可以删除onLoad={setloaded('true') 并尝试其他一些逻辑来摆脱这个无限循环。

标签: reactjs error-handling onload


【解决方案1】:

试试这个onLoad={() =&gt; {setloaded('true')}}

【讨论】:

  • 必须将 !important 添加到我的 css 显示属性中,它现在可以工作了
  • 谢谢 如果您能提供帮助,我还有一个问题。如何使用Router导出多个指数?使用Router{ Navbar, MobileMenu } 导出;
  • 我没有完全理解你的问题。您可以尝试类似 ``exports = { Navbar: withRouter(Navbar), MobileMenu: withRouter(MobileMenu) }; ```
  • 让我看看我能不能再一秒钟再发一个问题
  • 你可以像你一样使用module.exports = { Navbar: withRouter(Navbar), MobileMenu: withRouter(MobileMenu) };,当你在其他地方使用它时,你必须这样做import { Navbar, MobileMenu } from "path-to-the-file"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-06
  • 2023-01-29
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 2021-04-28
  • 1970-01-01
相关资源
最近更新 更多