-
Notifications
You must be signed in to change notification settings - Fork 4.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
scrollView 组件在页面重新setState后滚动至最开始的位置 #8466
Comments
我也遇到了 请问有什么临时的解决方法吗?我是ios设置scrollIntoView没有问题,但是安卓不行 安卓每次设置scrollIntoView都会回滚到最顶部 |
请问解决了吗,我也出现了这个问题 |
很急,很急,这问题非常影响使用,不解决根本不敢给客户用啊 |
也遇到了,难道只能回退2了? |
现在我只能用原生组件了,用了原生组件就没有问题了。其实我也奇怪我只是一个样式修改的setState,会导致全部元素的属性都刷新了。 |
基于组件的 template,动态 “递归” 渲染整棵树 这可能就是问题的关键了,所有组件的状态无法保留。 |
看了一下,由于是动态递归渲染的,而且在base.wxml 这个文件的 scroll-view 元素赋值了 scroll-left,如果没有设置的话就是必然是等于0的,导致每次渲染的时候都滑回最开始的地方或者 intoView 失效。 我现在都是监听事件,处理了。但是这样子的设计显然会带来更多问题。 |
传入下 |
同样的问题,有解决的吗 |
发现这个问题没人理 |
利用 useRef ,监听滑动事件,实时记录滑动的位置。然后 scrollLeft={scrollLeftRef.current} |
@zqjimlove 多谢,我去试试,不过感觉有点那啥 |
补充下该问题的代码说明,由于同级组件更新会导致 function Demo () {
const items = useMemo(() => {
const temp: number[] = [];
for (let i = 0; i < 20; i++) {
temp.push(i);
}
return temp;
}, []);
const [show, setShow] = useState(false);
const scrollRef = useRef(0);
return (
<Fragment>
<ScrollView
scrollWithAnimation
scrollY
className="scroll-view"
scrollTop={scrollRef.current}
onScroll={e => {
scrollRef.current = e.detail.scrollTop
}}
>
{items.map((item) => (
<View className='item'>{`item-${item}`}</View>
))}
<View className='button' onClick={() => setShow(true)}>
点击
</View>
</ScrollView>
{show && <View onClick={() => setShow(false)} className="modal"></View>}
</Fragment>
);
};``` |
onscroll 事件的e.detail.value 在加载下一页数据的时候 就会直接变为0 这样设置依然解决不了 回到顶部的问题 怎么办 |
相关平台
微信小程序
小程序基础库: 2.14.1
使用框架: React
复现步骤
见以下示例代码
class index extends Component {
constructor(props) {
}
render() {
}
}
期望结果
setState后scrollView组件的滚动位置保持不变
实际结果
setState后scrollView会滚动至最开始的位置
环境信息
补充信息
最开始我以为是scrollIntoView的问题,但后面发现即使去掉scrollIntoView属性,还是会有上述问题
有点像是setState后整个组件被重新渲染了一样,但是scrollView用到的state实际并未发生变化所以理应不该重新渲染
The text was updated successfully, but these errors were encountered: