如何在React Lifecycle Methods中正确调度操作?

时间:2018-03-23 09:17:38

标签: javascript reactjs redux action react-lifecycle

如何在React Lifecycle Methods中正确派遣行动?

你好,朋友们 我在我的父组件(App.jsx)中有一个名为checkSession()的操作。此操作可帮助我获取用户信息。
这就是App.jsx的样子:

class App extends Component {
  componentWillMount() {
    this.props.checkSession();
  }
  render() {
    if (this.props.auth === null) {
      return <div>Loading...</div>;
    } else {
       return (
         <BrowserRouter>
           <Route path="/cart" component={Cart} />
         </BrowserRouter>
      );
    }
  }
}
const mapStateToProps = ({ auth }) => { auth };
export default connect(mapStateToProps, { checkSession })(App);

如何在Cart.jsx组件中正确分派其他操作。 我尝试在componentWillReceiveProps方法中调度动作,但它会创建一个无限循环。 我的Cart.jsx组件如下所示:

import { getCart } from "../../actions"; 

class Cart extends Component {
  componentWillReceiveProps(nextProps, nextState) {
    if (nextProps.auth) {
      this.props.getCart(nextProps.auth.googleId);
    } else {
      this.props.getCart(null);
    }
  }
  render() {
    ......some staff  
  }
}
const mapStateToProps = ({ auth }) => { auth };
export default connect(mapStateToProps, { getCart })(Cart);

我刚尝试在ComponentWillMount中调度此动作 - 但是我的道具尚未就绪,所以我收到了一个错误。 请提出任何建议,请帮助我,对不起我的英语。

1 个答案:

答案 0 :(得分:1)

也许你必须在发射调度之前检测道具是否已经改变:

componentWillReceiveProps(nextProps, nextState) {
    const currentId = this.props.auth && this.props.auth.googleId;
    const nextId = nextProps.auth && nextProps.auth.googleId;
    if (currentId !== nextId) {
        this.props.getCart(nextProps.auth.googleId);
    }
}