У меня есть компонент с методом живого цикла 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);



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


мое предложение: вы действительно не хотите, чтобы 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();
}
Я удалил componentWillReceiveProps и его содержимое и добавил вызов действия после открытия рендера this.props.fetchCourses(); Я вижу, что компонент обновляется за секунду. это нормально?
я не знаю вашего варианта использования.. на основе вашего кода вам не нужен componentWillReceiveProps...
Спасибо, как запустить выборку после срабатывания функции? не могли бы вы указать мне пример?