- 23
- 0
问题描述
项目使用了react-native-scrollable-tab-view来实现tab栏位切换,发现在debug的时候内容会不停抖动(较大几率出现),发布到正式生产环境目前还没有碰到过。
问题出现的环境背景及自己尝试过哪些方法
尝试发现,如果react-native-scrollable-tab-view中固定每一个标签页的宽度,就不会抖动(这个是通过反复加载来确认的),但由于标签页显示的文字是后台设置的,不能采用简单的固定每个标签页宽度来解决这个问题
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
{/*顶部tabView滑动切换布局*/}
{this.state.boardList.length > 0 ? (
<View style={styles.tabBgStyle}>
<ScrollableTabView
ref={ref => {
this.scrollableTabView = ref;
}}
renderTabBar={() => <ScrollableTabBar style={styles.tabStyle}/>}
tabBarUnderlineStyle={styles.tabBarLine}
tabBarActiveTextColor={global.homeColor}
tabBarInactiveTextColor="#666666"
tabBarTextStyle={styles.tabBarTextStyle}
onChangeTab={(obj) =>this.handleChangeTab(obj)}
>
{this.state.boardList.map((v, i) => this.renderBoardItem(v, i))}
</ScrollableTabView>
<TouchableOpacity
onPress={() => {
NoDoublePress.onPress(() => {
this.refs.modalRef.open();
})
}}
style={{
width: 40,
height: 46,
alignItems: "center",
justifyContent: "center",
backgroundColor: "#fff",
position: "absolute",
right: 0,
top: 0,
opacity: 0.8
}}
>
<Image source={Shape} style={{width: 17, height: 15}}/>
</TouchableOpacity>
<View style={{
backgroundColor: '#f3f4f5',
height: 1,
width: '100%',
position: 'absolute',
top: 46
}}>
</View>
</View>
) : null}
// 相关style
tabBgStyle: {
backgroundColor: '#ffffff',
flex:1,
flexDirection:'column',
alignItems: 'center',
justifyContent: 'flex-start',
},
tabStyle: {
backgroundColor: '#ffffff',
borderWidth: 0,
width: '100%',
height: 46,
alignItems: 'center',
justifyContent: 'center',
paddingRight:40,// 安卓上直接设置width:width-40会出现左边有留白的问题,可以用paddingRight来设置右边
},
tabBarTextStyle: {
width:'100%',// debug下测试如果宽度写死固定宽度,可以避免抖动的问题发生。
flexDirection:'column',
alignItems: 'center',
justifyContent: 'center',
fontSize:setSpText(16),
},
tabBarLine: {
width:0,
height:0,
},
你期待的结果是什么?实际看到的错误信息又是什么?
- 共 0 条
- 全部回答
-
旧⊙人往事 普通会员 1楼
在React Native中,
react-native-scrollable-tab-view是一个用于显示多行滚动视图的组件。如果你在使用这个组件时发现它有抖动现象,这可能是因为你在更改视图的组件树时,可能会引起某些组件的布局或性能问题。解决这个问题的一种方法是使用
React.memo或shouldComponentUpdate生命周期方法来防止组件树的更新。这些方法可以帮助你在更新视图之前检查组件的状态,从而防止性能问题。以下是一个使用
React.memo的例子:```jsx import React from 'react'; import { View, Text } from 'react-native';
const TabView = React.memo(function(TabView) { return (
{TabView.content} ); });export default TabView; ```
在这个例子中,我们使用了
React.memo来修饰TabView组件。这个组件只有在它的content属性没有改变的情况下才会被重新渲染。这样,即使content属性的值发生了改变,也不会导致组件树的更新。另一种方法是使用
shouldComponentUpdate生命周期方法。这是一个更简洁的方法,但可能会更难以理解。以下是一个使用shouldComponentUpdate的例子:```jsx import React from 'react'; import { View, Text } from 'react-native';
const TabView = React.memo(function(TabView) { return (
{TabView.content} ); });export default TabView; ```
在这个例子中,我们使用了
shouldComponentUpdate来检查TabView组件的状态。如果它的状态发生了改变,那么它就会重新渲染组件,而不是等待视图的内容改变。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
