【问题标题】:problem with loading the spinner - ReactJS加载微调器的问题 - ReactJS
【发布时间】:2019-10-18 14:20:37
【问题描述】:

我是 ReactJS 的新手,所以我可能没有注意到这里有什么明显的东西。问题是加载时不可见。我在return() 之前尝试了alert 和console.log,它也不起作用。

代码如下,组件链接成功:

import React, {Component} from 'react';
import styled, {keyframes} from 'styled-components';
import LoaderImg from './LoaderImg.png';
import './Loader.scss';

const spinning = keyframes`
    from {transform: rotate(0deg);}
    to {transform: rotate(360deg);}
`;

const Spinner = styled.div`
    animation: ${spinning} 2s infinite linear;
`;

class Loader extends React.Component {
    constructor(props) {
       super(props);
       this.handleLoad = this.handleLoad.bind(this);
    }

    componentDidMount() {
        window.addEventListener('load', this.loading);
        window.requestAnimationFrame(this.loading);
    }

    componentWillUnmount() { 
      window.removeEventListener('load', this.loading);
    }

    loading() {
        console.log("TEST");
        return (
            <Spinner className="Spinner">
                <img src={LoaderImg} className="Spinner-Img"/>
            </Spinner>
        );
    }
  }

export default Loader;

【问题讨论】:

  • 你错过了渲染方法。请从 render 方法返回所有 jsx。你把它放在 loading()

标签: javascript reactjs spinner loading


【解决方案1】:

给你。

class Loader extends React.Component {
    constructor(props) {
       super(props);
       this.handleLoad = this.handleLoad.bind(this);
    }

    componentDidMount() {
        window.addEventListener('load', this.loading);
        window.requestAnimationFrame(this.loading);
    }

    componentWillUnmount() { 
      window.removeEventListener('load', this.loading);
    }

    render() {
        console.log("TEST");
        return (
            <Spinner className="Spinner">
                <img src={LoaderImg} className="Spinner-Img"/>
            </Spinner>
        );
    }
  }

【讨论】:

  • 恐怕在这个解决方案 window.removeEventListener('load', this.loading);不会工作。
  • 为什么? componentWillUnmount() 将在此组件卸载时调用,并执行您的代码。
【解决方案2】:

你的渲染方法在哪里?我认为它没有加载,因为您使用了 loading() 而不是 render 并且您没有从任何库或包中导入 Spinner 对象。试试这个

render() {
    console.log("TEST");
    return (
        <Spinner className="Spinner">
            <img src={LoaderImg} className="Spinner-Img"/>
        </Spinner>
    );
}

如果它不起作用,则说明您的微调器有问题。试试这个库。 react spinners. 这将帮助您添加微调器。

【讨论】:

  • Spinner 包含在这个组件中,如果我将 load() 更改为 render() componentDidMount() { window.addEventListener('load', this.loading); window.requestAnimationFrame(this.loading); } componentWillUnmount() { window.removeEventListener('load', this.loading); } 不管用。 :(
【解决方案3】:

你错过了渲染功能请添加这个

 render() {
   return (
       <>
       {this.loading()}
       </>
    )
 }

【讨论】:

    【解决方案4】:

    需要一个渲染函数,因为它将被 React 调用以渲染/重新渲染组件

    -或者-将 loading() 更改为 render()

    render() {
        console.log("TEST");
        return (
            <Spinner className="Spinner">
                <img src={LoaderImg} className="Spinner-Img"/>
            </Spinner>
        );
    }
    

    -或-添加:

    render(){
        return (
            <div>
                {/* some more components */}
                {this.loading()}
            </div>
        )
    
    }
    

    【讨论】:

      【解决方案5】:

      React 文档说

      render() 方法是类组件中唯一需要的方法。

      你错过了,你可以这样做

      render() {
        return <>{this.loading()}</>
      }
      

      希望对你有帮助

      【讨论】:

      • 你的意思是:[...] loading() { return ( ); } 渲染() { 返回 {this.loading()}> } [...] ?不渲染微调器。 :(
      • 有效,但它是您选择创建的类方法,render 是类组件中的必需方法,它会调用您的加载方法,并且在这种情况下,加载返回的内容将从您的组件返回,只需在加载方法后添加此渲染方法
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 2021-09-27
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多