React componentWillUpdate выполняется каждую секунду и условие не работает - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть компонент React с componentWillUpdate в этом методе жизненного цикла, который я называю действием, в действии есть console.log.

У меня есть два вопроса:

  1. почему componentWillUpdate запускается каждую секунду?

  2. почему if в componentWillUpdate не работает?не должен ли он работать, только если реквизиты не совпадают?

это код компонента:

** updated **

     import React, { Component } from "react";
import { connect } from "react-redux";
import { fetchCourses } from "../../actions";

class Courses extends Component {
  componentDidMount() {
    this.props.fetchCourses();
  }

  componentWillUpdate(prevProps) {

    if (this.props.courses !== prevProps.courses) {
      console.log('prevProps.courses ', prevProps.courses);
      console.log('this.props.courses ', this.props.courses);
      this.props.fetchCourses();
    }
  }

  render() {
    console.log('this.props.payload.courses ', this.props.courses);
    const courses = this.props.courses.map(course => {
      return (
        <tr>
          <td>{course.coursename}</td>

          <td>{course.coursetype ? "yes" : "no"}</td>

          <td>{course.courseweeklyhours}</td>

          <td>
            <button>הסר</button>
          </td>
        </tr>
      );
    });

    return (
      <div>
        Courses
        {courses}
      </div>
    );
  }
}

const mapStateToProps = state => {
  // console.log('state ', state);

  return {
    courses: state.courses
  };
};

export default connect(
  mapStateToProps,
  { fetchCourses }
)(Courses);

Courses возвращает массив

enter image description here

1 Ответ

0 голосов
/ 04 апреля 2019
const arr1 = [1,2,3,4]
const arr2 = [1,2,3,4]

arr1 == arr2 // answer is false

Значит, arr1 !== arr2 означает истину.Таким образом, блок кода будет работать.Внутри вы называете действия создателя.Теперь магазин будет обновляться.Теперь он снова проверит состояние внутри componentWillUpdate ().Ага.снова arr1 !== arr2, что означает истина.так что опять будет работать.снова это назовет действие создателя.то же самое происходит бесконечное время.Проблема с вашим состоянием.

1) Каждый раз, когда вы обновляете хранилище componentWillUpdate (), выполняется.Внутри у тебя навсегда истинное состояние.При этом внутри структуры if вы снова вызываете создателя действия.поэтому он обновит магазин снова.Для этого componentWillUpdate () выполняется снова.Теперь из-за вечно истинного условия «если структура» будет работать снова.будет работать снова и снова, пока вы не убьете сервер.

...