React - условие componentWillReceiveProps не отображает данные в компоненте

У меня есть компонент с методом живого цикла componentWillReceiveProps. внутри компонента я могу создать действие.

Насколько я понимаю, componentWillReceiveProps рендерит компонент каждую секунду. по этой причине я добавил условие для активации рендеринга компонента только тогда, когда this.props не равно prevProps.

по какой-то причине каждый раз, когда реквизит обновляется, this.props.fetchCourses(); внутри componentWillReceiveProps не отображается. также я не вижу результата console.info. Что указывает на то, что блок не p

Я использую библиотеку fast-deep-equal для сравнения объектов, но я открыт для предложений.

мой вопрос в том, почему компонент не отображается при обновлении реквизита.

import React, { Component } from "react";
import { connect } from "react-redux";
import equal from "fast-deep-equal";

import { fetchCourses, deleteCourse } from "../../actions";

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


  componentWillReceiveProps(prevProps) {
    console.info(this.props.courses);
    console.info(prevProps.courses);

    if (!equal(this.props.courses, prevProps.courses)) {
      this.props.fetchCourses();
    }
  }

  render() {
    const prevProps = prevProps => {
      console.info("this.props", this.props.courses.length);
      console.info("prevProps ", prevProps.courses.length);
    };

    const courses = this.props.courses.map(course => {
      return (
        <tr key = {course && course.id}>
          <td>
            {course.coursename}- {course && course.id}
          </td>

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

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

          <td>
            <button
              onClick = {() => this.props.deleteCourse(course && course.id)}
            >
              הסר
            </button>
          </td>
        </tr>
      );
    });

    return <tbody>{courses}</tbody>;
  }
}

const mapStateToProps = state => {
  console.info("state ", state);

  return {
    courses: state.courses
  };
};

export default connect(
  mapStateToProps,
  { fetchCourses, deleteCourse }
)(Courses);
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
46
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

мое предложение: вы действительно не хотите, чтобы componentWillReciveProps() запускал курс выборки... всякий раз, когда вы выполняете такие операции, как (создание, обновление, удаление и т. д.) в курсах, запускать действие извлечения курса после каждой функциональности.. оно автоматически обновит хранилище избыточности, а компонент (курсы) будет обновляться автоматически.

handleCreateCourse = async (values)=>{

  //logics for create courses and api call
   await createCourse(values);

   //trigger your fetchCourses action here 
   //it will update your other components where you listened courses from redux.
   this.props.fetchCourses();  

}

Спасибо, как запустить выборку после срабатывания функции? не могли бы вы указать мне пример?

DavSev 07.04.2019 12:21

Я удалил componentWillReceiveProps и его содержимое и добавил вызов действия после открытия рендера this.props.fetchCourses(); Я вижу, что компонент обновляется за секунду. это нормально?

DavSev 07.04.2019 12:26

я не знаю вашего варианта использования.. на основе вашего кода вам не нужен componentWillReceiveProps...

sathish kumar 07.04.2019 12:30

Другие вопросы по теме