react-native-collapsible折叠后新增组件高度不更新问题求助
解决react-native-collapsible折叠后内容更新高度不更新的问题
我之前也踩过react-native-collapsible这个高度计算的坑,结合你提到的两个已知问题,分享几个亲测有效的解决办法:
通过动态Key触发组件重渲染
Collapsible组件默认是基于初始渲染时的内容高度来计算折叠状态的,当内部内容高度变化后,它不会自动重新计算。这时候可以给外层Collapsible加一个动态的key,把和内容变化相关的state值(比如你的description或status)作为key的一部分。当内容更新时,key会跟着变化,强制Collapsible重新挂载并计算新的高度:<Collapsible collapsed={!this.state.display} duration={500} align="center" key={`collapsible-${this.state.description}-${this.state.status}`} > <View> ... some component ... <ToggleInputBox label="Description" value={this.state.description} onChangeText={(description) => this.setState({ description, status: 'unsaved' })} /> </View> </Collapsible>调用组件内置的refresh方法手动更新高度
react-native-collapsible其实提供了refresh方法来重新计算内容高度,你可以通过ref获取组件实例,在内容更新后主动调用它。这种方法比重渲染组件的性能更好:- 先创建ref:
constructor(props) { super(props); this.collapsibleRef = React.createRef(); } - 在内容更新的回调里调用refresh:
<ToggleInputBox label="Description" value={this.state.description} onChangeText={(description) => { this.setState({ description, status: 'unsaved' }, () => { // 确保状态更新完成后再调用 if (this.collapsibleRef.current) { this.collapsibleRef.current.refresh(); } }); }} /> - 给Collapsible绑定ref:
<Collapsible ref={this.collapsibleRef} collapsed={!this.state.display} duration={500} align="center" > {/* 你的内容组件 */} </Collapsible>
- 先创建ref:
处理嵌套Collapsible的联动更新
看你代码里注释提到还有嵌套的Collapsible组件,如果内部折叠状态变化也会影响外层高度,那需要确保内部状态变化时,外层也能触发高度更新。你可以给内部Collapsible同样加动态key,或者在内部状态变化时调用外层Collapsible的refresh方法。
另外还要注意:确保你的内容组件没有设置固定高度,否则Collapsible无法正确计算自适应高度;如果用了ScrollView等滚动容器,要确保Collapsible的布局上下文是正确的,避免overflow属性影响高度计算。
内容的提问来源于stack exchange,提问作者Kishan Bharda
相关产品推荐
相关产品推荐

