reactjs - 在上下文中解决 setState 问题(react-native)
问题描述
我正在渲染很多 Text 组件并保存位置(以便滚动到它们),但我想通过去抖动“捆绑”它来提高性能(并且愿意接受其他可以提高性能的建议)。
...
import debounce from 'lodash/debounce'
...
class ContextProvider extends Component {
....
setContentPosition = (layout, key) => {
const contentPos = { ...this.state.contentPos }
contentPos[key] = layout.nativeEvent.layout.y
// TODO: make it debounce https://stackoverflow.com/questions/23123138/perform-debounce-in-react-js
this.setState({ contentPos }, () => console.log('contPos updated'))
}
...
render() {
return (
<Provider
value={{
setContentPosition: this.setContentPosition,
}}
>
{this.props.children}
</Provider>
)
}
}
我尝试了几种不同的组合,但没有运气。期待这能奏效:
...
render() {
return (
<Provider
value={{
setContentPosition: debounce(this.setContentPosition, 200),
}}
>
{this.props.children}
</Provider>
)
}
}
它抛出以下错误:
更新01
以下更改(对于contentPos[key]
)
setContentPosition = (layout, key) => {
const contentPos = { ...this.state.contentPos }
//console.log(layout.nativeEvent)
contentPos[key] = layout.nativeEvent
// TODO: make it debounce https://stackoverflow.com/questions/23123138/perform-debounce-in-react-js
this.setState({ contentPos }, () => {
console.log('contPos updated')
})
}
改为显示此警告:
该位置用于滚动到文本组件(搜索时),我有一些滚动到某个Text
组件的测试代码 - 适用于 iOS 但不适用于 Android?
解决方案
推荐阅读
- python - 深度优先搜索python
- video-streaming - VLC displaying only a small portion of the output then crashes when reading SDP file
- c# - How to fix " The property is set more than once"?
- firebase - 如何从网络客户端保护我的 Firebase“订阅主题”?
- geometry - st_isvalid 和 st_issimple 有什么区别?
- c# - 我们可以从同一个类中的公共静态方法调用事件吗?
- postgresql - 使用 psql 选项
- elasticsearch - 如何计算一组文档中出现次数最多的单词然后执行子聚合
- javascript - 相邻的 Svelte 商店是否可以相互更新?
- spring-boot - 如何在 Spring Security 中通过 jdbc 身份验证使用自定义登录页面