Javascript Reactjs:仅在渲染中更改状态几次
我的理解是,您不应该更改渲染函数中的状态,因为这会导致无限重渲染或组件 这很有道理,但我发现自己处于一种特殊的情况。我正在构建一个脱机应用程序,并使用脱机存储系统检索数据。现在,每当调用一个方法来获取某些数据时,都会检查缓存,如果缓存未过期,组件将能够访问数据,因此不会发生任何事情,但是如果缓存过期,则会调用API,更新数据并重新呈现感兴趣的组件 这些方法将在第一次调用组件时更改组件的状态,因为它们将转到API获取新数据并重新渲染,然后它们将不再更改状态,因为数据已在缓存中 现在,我可以在component will mount中调用这些方法,这就是我现在正在做的,但是如果我被迫重新调用它们,我需要卸载并重新装载组件。这是唯一可行的方法吗Javascript Reactjs:仅在渲染中更改状态几次,javascript,reactjs,offlineapps,Javascript,Reactjs,Offlineapps,我的理解是,您不应该更改渲染函数中的状态,因为这会导致无限重渲染或组件 这很有道理,但我发现自己处于一种特殊的情况。我正在构建一个脱机应用程序,并使用脱机存储系统检索数据。现在,每当调用一个方法来获取某些数据时,都会检查缓存,如果缓存未过期,组件将能够访问数据,因此不会发生任何事情,但是如果缓存过期,则会调用API,更新数据并重新呈现感兴趣的组件 这些方法将在第一次调用组件时更改组件的状态,因为它们将转到API获取新数据并重新渲染,然后它们将不再更改状态,因为数据已在缓存中 现在,我可以在com
谢谢 第一步是理解状态管理和渲染需要解耦,这是您已经得到的
现在你可以做的是把你的外部状态/缓存元素看作一个可观察的对象(例如,我想做一些类似于
非常简单:onChangeHandler
将触发组件重新呈现,该组件应该是一个纯函数,根据传递的this.setState({value:observeObject.value})
及其自身的props
状态来输出DOM节点
onChangeHandler
更改了状态
希望我能帮上忙。好的,所以当某些内容发生更改时,我已经在缓存中调用render()。您提出的解决方案是,我可以在组件中调用一个方法,根据需要更新缓存并调用缓存,而不是简单地调用render?是的,您基本上可以在外部缓存/状态
和您自己的组件实例状态
之间创建一个“链接”。如果一个改变了,另一个会得到通知。类似这样的内容:this.props.myCache.listen('change',this.onCacheChange)
和this.onCacheChange=()=>this.setState({value:this.props.myCache.getValue()})代码>关于React的更多信息。是的,但这已经发生了。所以,假设有东西清除了缓存。缓存会触发感兴趣的所有页面的重新阅读。问题是在ComponentMount中调用的方法将被调用,需要再次调用API并更改缓存,这将导致重新渲染。这是否为我提供了一个解决方案,不仅从缓存中重新渲染,而且在我的组件中调用一个方法,该方法异步调用api,然后重新渲染。componentWillMount
应该只执行一次。由于状态更改而重新渲染不会卸载组件。缓存更新只应通知侦听器。该句柄中的业务逻辑是每个组件的。在我的示例中,我使用了一个setState
调用。这种方法可能更复杂。我不明白你是怎么看待无限重渲染的。对,我想那就是你当时的建议。我会选择这个作为答案。