React没有重新渲染

时间:2019-11-19 04:10:11

标签: javascript reactjs

我现在正在从事React组件的工作,以前曾经在其中工作过,但是在涉及到它时,我仍然觉得自己很漂亮。

问题:我的setState正在刷新和更改this.state,但是我的组件根本没有重新渲染。我可以观看状态更改,甚至可以手动更改它,但是它仍然不会更改我的任何条件渲染。我正在尝试有条件地渲染ProcessingBox和JobsGrid,但是我什么都无法加载。

尝试:我试图对组件周围的所有日志进行控制台,甚至在函数中,我都获得了想要的正确输出,但不会重新加载组件。我也尝试过进行forceUpdate,但是仍然无法正常工作。 Aslo尝试使componentDidMount异步,但是没有运气。我的下一个理论与样式化组件有关,还有npm可能遗漏的某些东西。

import React, { Component } from 'react';
import { render } from 'react-dom';
import { JobsGrid, ProcessingBox, JobsContainer } from './styled';

class Employment extends Component {
  state = {
    categories: [],
    jobs: [],
    activeJob: {},
    activeCategory: {},
    processing: false
  };


  componentDidMount() {
    this.getCategories();
  }

  getCategories = async () => {
    this.setState({ processing: true });
    await fetch('url', {
      headers: {
        Authorization: 'Bearer token',
      }
    }).then(res => res.json())
      .then((result) => {
        this.setState({ categories: result.data, processing: false });
      });
  };

  isLoading = (processing) => {
    console.log(processing);
    if (processing) {
      return (
        <ProcessingBox>
          <img src="/build/img/loading.GIF" alt="" />
        </ProcessingBox>
      )
    } else {
      return (
        <JobsGrid>
          <div className="container">
            <div>Hi</div>
          </div>
        </JobsGrid>
      )
    }
  };


  render() {

    return (
      <JobsContainer>
        {
          this.isLoading(this.state.processing)
        }
      </JobsContainer>
    );
  }
}

const
  element = document.querySelector('#employment');

if (element) {
  render(
    <Employment />,
    element
  );
}

4 个答案:

答案 0 :(得分:0)

尝试以此更改您的getCategories函数,

getCategories = async () => {
 this.setState({ processing: true });
 const res = await fetch('url', { headers: { Authorization: 'Bearer token',} });
 const result = await res.json();
 this.setState({ categories: result.data, processing: false });
};

我认为您当时正在使用并且同时等待,等待用于等待诺言,看看它是否解决了您的问题,

希望有帮助

答案 1 :(得分:0)

您需要在抓取中添加.catch

getCategories = async () => {
    this.setState({ processing: true });
    await fetch('url', {
    headers: {
        Authorization: 'Bearer token',
    }
    })
        .then(res => res.json())
        .then((result) => {
            this.setState({ categories: result.data, processing: false });
        })
        .catch(err){
            this.setState({ categories: null, processing: false });
        };
};

答案 2 :(得分:0)

解决方案:错误的依存关系导致DOM无法重新呈现。基本上我什至没有安装React。转到另一个已经安装了React并像魅力一样工作的项目,清理了一些代码并了解了很多有关babel的知识。从我的错误中学习?

答案 3 :(得分:-1)

我认为您的最后一部分应该更改,应该是 @echo off && setlocal EnableDelayedExpansion (set "_str=0R/ecord\-# ',? 1>|<2Count>/3$4]C{^5_6&7}NUMBER = *|8!9" for /f %%n in ('cmd /u /c echo="!_str!"^|find /v " "^|findstr [0-9] ')do set "_l=!_l!%%~n") && echo=Numbers in this variable _str: !_l! ,而不是 ReactDOM.render()

render()