调用API反应模式给了无限循环

问题描述:

componentWillReceiveProps(nextProps) { 

     if(nextProps.isOpen){ 
      const { selectedItemId} = this.props; 
      //ajax 
     } 
    } 

我有需要调用API一个模态分量,我不喜欢这样,ISOPEN是打开和关闭模式的一个标志,但这种做法我无限通话。调用API反应模式给了无限循环

+0

'每当有道具的变化componentWillReceiveProps'将被调用。它可以来自内部状态或您自己的应用程序状态。将'ajax'写入'componentDidMount'中,并且不要渲染你的'modal',直到'isOpen'为真。 – Panther

+0

我在我的模态的contstuctor中做了一个console.log,它在我加载包含它的页面时触发。不要渲染你的意思是什么? –

+0

'componentWillReceiveProps'将被称为'n'次。你必须在父组件的渲染方法中有条件地渲染你的模态,比如'{this.state.isOpen? ():null}' – Panther

只需使用一个标志,不要求所有的时间,而你正在申请/渲染

componentWillReceiveProps(nextProps) { 
    if(nextProps.isOpen && !this.requesting){ 
     const { selectedItemId } = this.props; 
     this.requesting = true; 
     //ajax 
     ajax.then(() => { 
      this.requesting = false; 
     }) 

    } 
} 
+0

虽然这很奇怪,但我认为Panther所说的更有意义。 –

+0

这取决于你想如何工作,以及你如何需要它。例如,如果您需要在模态打开的情况下发出请求(例如,您单击模态中的某些内容,然后需要提出请求)。你的问题在用例上不太清楚,所以我只是为你当前的实现编写它。 –