Reactjs:仅在渲染中更改状态几次

Reactjs: Change state in render only some times

据我了解,您不应该更改渲染函数中的状态,因为这会导致无限重新渲染或组件。

这很有道理,但我发现自己处于特殊情况。我正在构建一个离线应用程序,我正在使用一个离线存储系统来检索数据。现在,每当调用一个方法来获取某些数据时,都会检查缓存,如果它没有过期,组件将能够访问数据,因此什么也不会发生,但是如果它过期了,就会调用 API, 更新数据并重新渲染感兴趣的组件。

这些方法会在第一次调用时改变组件的状态,因为它们会API抓取新数据并重新渲染,然后它们就不会再改变状态了,因为数据已经在缓存中。

现在,我可以在组件挂载时调用这些方法,这就是我现在正在做的,但是如果我被迫重新调用它们,我需要卸载并重新挂载组件。这是唯一可行的方法吗?

谢谢!

好吧,第一步是了解状态管理和渲染需要解耦,您已经知道了。

现在你可以做的是将你的外部 state/cache 元素视为一个可观察对象(即我想做类似 observableObject.listen('change', onChangeHandler) 的事情;你可以使用 events 中的 EventsEmitter图书馆)。 You do that listening on componentDidMount and clean up in componentWillUnmout. onChangeHandler 非常简单:this.setState({ value: observableObject.value }) 将触发组件重新渲染,这应该是一个纯函数,根据 props 输出 DOM 个节点已通过,属于自己 state.

这意味着您检查缓存是否无效的逻辑不是基于值的每个请求(内部呈现),而是将对象视为自包含的。它会定期检查自己是否需要通知其听众它已更改。由于 JS 不进行并行执行,因此您不必处理线程和同步。您知道在您的渲染函数执行的时间点,它将具有最新值。如果在呈现检查缓存的逻辑执行后发现它需要更新,它只是如前所述通知它的侦听器,这会使您的组件重新呈现,因为您的 onChangeHandler 更改了 state

希望我有所帮助。