奇怪的行为Redux

时间:2017-05-21 22:16:42

标签: reactjs redux react-redux

在我的组件中,我想检查参数何时更改并相应更新。但是,当我这样做时,我看到了奇怪的行为,并且已经向我的api发出了多个请求。

我的组件:

 componentWillMount() {
    this.state = {
      path: this.props.match.params.categoryName,
    };
  }

  componentDidUpdate(prevProps) {
    if (prevProps === undefined) {
      return false;
    }

    if (this.state.path !== this.props.match.params.categoryName) {
      this.getCategory()
    }
  }

  getCategory() {
    if (this.props.allPosts && this.props.allPosts.length) {
      const categoryId = _.result(_.find(this.props.allPosts, v => (
        v.name === this.props.match.params.categoryName ? v.id : null
      )), 'id');
      this.props.dispatch(Actions.fetchCategory(categoryId));
    }
  }

我的行动:

import Request from 'superagent';
import Constants from '../constants';

const Actions = {
  fetchCategory: categoryId => (dispatch) => {
    dispatch({ type: Constants.CATEGORY_FETCHING });

    Request.get(`/api/v1/categories/${categoryId}`)
      .then((data) => {
        dispatch({
          type: Constants.CATEGORY_RECEIVED,
          category: { id: data.body.id, name: data.body.name },
          category_posts: data.body.posts,
        });
      });
  },
};

export default Actions;

我的减速机:

import Constants from '../constants';

const initialState = {
  posts: [],
  category: [],
  fetching: true,
};

export default function reducer(state = initialState, action = {}) {
  switch (action.type) {
    case Constants.CATEGORY_FETCHING:
      return Object.assign({}, state, { fetching: true });

    case Constants.CATEGORY_RECEIVED:
      return Object.assign({}, state, { category: action.category,
        posts: action.category_posts,
        fetching: false });

    default:
      return state;
  }
}

0 个答案:

没有答案