HOC срабатывает, пока я использую его на контейнере - PullRequest
0 голосов
/ 03 ноября 2018

Может ли кто-нибудь помочь мне, потому что я не могу понять, почему HOC вызывает цикл ifnite, когда я использую его в контейнере. Это мой контейнер:

class UserContainer extends Component {
  componentDidMount() {
    const { onValuePassedThroughParams, match } = this.props;

    const { user } = match.params;
    if (user !== '') {
      onValuePassedThroughParams(user);
    }
  }

  render() {
    const { user } = this.props;
    return (
      <UserView user={user} />
    );
  }
}

const UserContainerWithLoading = LoaderHOC(UserContainer);

const mapStateToProps = state => ({
  user: state.user,
});

const mapDispatchToProps = dispatch => ({
  onValuePassedThroughParams: val => dispatch(takeUserNameAndFetchData(val)),
});

export default
withRouter(
  connect(mapStateToProps, mapDispatchToProps)(UserContainerWithLoading),
);

мой HOC:

const LoaderHOC = WrappedComponent => props =>{

  return(
  props.user.isLoading
    ? <div className={styles.ldsHourglass} />
    : <WrappedComponent {...props} />
)};

а также гром:

function fetchData(url) {
  return (
    fetch(url)
      .then(result => result.json())
  );
}

export default function takeUserNameAndFetchData(name) {
  const userInfoUrl = `https://api.github.com/users/${name}`;
  const userRepoUrl = `https://api.github.com/users/${name}/repos`;

  return (dispatch) => {
    dispatch(fetchUserBegin());
    Promise.all([
      fetchData(userInfoUrl),
      fetchData(userRepoUrl),
    ])
      .then(([info, repos]) => {
        dispatch(fetchUserInfoSucces(info));
        dispatch(fetchUserReposSuccess(repos));
        dispatch(fetchUserLoadingEnd());
      })
      .catch((err) => {
        console.log(`ERROR!${err}`);
        dispatch(fetchUserError());
      });
  };
}

Когда я использую HOC на моем компоненте View, все в порядке, и он прекращает получать данные с сервера, но когда я использую их в контейнере, всегда существует бесконечный цикл. У вас есть какой-нибудь совет для меня?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...