Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.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
Javascript React Native:如何使用ShouldComponentUpdate和setInterval和setState_Javascript_Reactjs_React Native_Setinterval_Setstate - Fatal编程技术网

Javascript React Native:如何使用ShouldComponentUpdate和setInterval和setState

Javascript React Native:如何使用ShouldComponentUpdate和setInterval和setState,javascript,reactjs,react-native,setinterval,setstate,Javascript,Reactjs,React Native,Setinterval,Setstate,我正在使用setInterval的组合,它位于我的componentDidMount函数中,它从API获取数据,并为获取的数据设置一个状态,显示在我的本地映射上。问题是将setInterval与setState一起使用成本太高,因为贴图必须每5秒重新渲染一次 componentDidMount() { this.interval = setInterval(() => { api.getData().then((res) => { th

我正在使用
setInterval
的组合,它位于我的
componentDidMount
函数中,它从API获取数据,并为获取的数据设置一个状态,显示在我的本地映射上。问题是将
setInterval
setState
一起使用成本太高,因为贴图必须每5秒重新渲染一次

componentDidMount() {
    this.interval = setInterval(() => {
        api.getData().then((res) => {
            this.setState({
                data: res
            })
        });
    }, 5000);
}
我对此进行了研究,发现我应该使用
houldComponentUpdate
,但我无法让它正常工作,因为贴图没有正确渲染,在不应该渲染时渲染,在应该渲染时不渲染

shouldComponentUpdate(nextProps, nextState) {
    for(var i = 0; i < this.state.data.length; i++) {
        if(this.state.data[i].value !== nextState.data[i].value) {
            return true;
        }
    }
    return false;
}
shouldComponentUpdate(下一步,下一步状态){
for(var i=0;i
我正在将我拥有的数据状态与下一个状态的数据进行比较,
即this.state.data!==nextState.data
,如果是,则返回true


我这样做是否正确,以至于这是一个应该由ComponentUpdate解决的问题,而我只是没有正确编写该函数,还是应该专注于另一个解决方案?

飞入的
应该由ComponentUpdate
解决:

  • 当组件收到新的
    props
  • 如果
    nextState
    的长度不同,则您的方法不会检查它。在这种情况下,我们总是希望重新加载
shouldComponentUpdate(下一步,下一步状态){
//举个例子,你需要比较道具里面的实际参数
如果(this.props!==nextrops){
返回true;
}
if(this.state.data.length!==nextState.data.length){
返回true;
}
for(var i=0;i}
数据的内部是什么?@fisna数据是一个包含整数“value”属性和整数“time”属性的对象。答案还取决于组件的
道具和另一个
状态。我发布了一个答案,它可能不完全适用于您的案例,但您应该了解这个想法。感谢您的回复。我是ReactNative新手,请您解释一下比较this.props和nextrops的作用,以及我们为什么需要它?在大多数情况下,当组件接收到新的
props
时,您不想停止重新加载程序。但我没有看到你的部件。它收到道具了吗?是的,收到了。它会收到各种道具,如搜索栏建议、选定的搜索栏项目等@ZainBudhwani,然后您需要检查
this.props
中的每个键,就像这样。道具建议!==下一步。建议?谢谢,现在有意义了!