Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs setTimeout后函数返回true(shouldComponentUpdate)_Reactjs - Fatal编程技术网

Reactjs setTimeout后函数返回true(shouldComponentUpdate)

Reactjs setTimeout后函数返回true(shouldComponentUpdate),reactjs,Reactjs,我想要一个函数在超时后返回true。这能做到吗 我想在reactsshouldComponentUpdate()方法中使用它。当返回true时,将呈现组件。我希望它在超时后渲染 到目前为止,我发现这一点,但它并没有像预期的那样起作用: shouldComponentUpdate(nextProps, nextState) { var promise = new Promise(function(resolve, reject) { window.setTimeout(function

我想要一个函数在超时后返回true。这能做到吗

我想在reacts
shouldComponentUpdate()
方法中使用它。当返回
true
时,将呈现组件。我希望它在超时后渲染

到目前为止,我发现这一点,但它并没有像预期的那样起作用:

shouldComponentUpdate(nextProps, nextState) {
  var promise = new Promise(function(resolve, reject) {
    window.setTimeout(function() {
      resolve(true);
    }, 3000);
  });
  return promise;
}

shouldComponentUpdate()
在3秒后返回true

shouldComponentUpdate
必须立即返回布尔值。它应该是同步和快速的

通常,如果您想进行一些真正的DOM操作(如动画),可以在
componentdiddupdate()
中进行

但是,您似乎希望在重新渲染之前播放动画。如果组件完全依赖于道具,最简单的方法是将动画代码放入
componentWillReceiveProps()
,然后在
shouldComponentUpdate()
中返回
false
。动画完成后,调用
this.forceUpdate()
强制重新渲染

我可以想象的另一种方式是用另一个组件包装组件。当你有一个更新,然后家长将保持3秒的变化,并做动画。之后,父母将新道具传给孩子


(对于解决方案1,使用
shouldComponentUpdate
而不是
componentWillReceiveProps
也可以,但是
componentWillReceiveProps
在我看来更合适)

您这样做的目的是什么
shouldComponentUpdate
应该是同步的。是否尝试执行轮询之类的操作?我想延迟渲染,以便为组件设置动画。如果组件在这个延迟期间得到了更新,我想重置它,而不是重新排序多次。