reactjs - 在 React + Typescript 中的每个按钮单击事件上自动滚动到最后一个 div
问题描述
我正在开发一些我们正在使用 React + Typescript 开发的应用程序。在这个我想实现自动滚动功能到最后一个 div。所以我有一些父 div,因为我正在根据我的对象数组中的数据添加子 div。我在单击按钮时在该对象中添加数据。因此,无论何时将新数据添加到该对象中,它都会在子组件中可见。因此相应地滚动应该自动在 div 的末尾。
我已经尝试了一些逻辑,因此根据该功能正在工作,但它滚动到父 div 的一半,但没有滚动到它的末尾。
我提供我的代码以供参考。
ParentComponant.tsx
import { useRef, useEffect } from"react"
import { ChildComponant } from'./ChildComponant'
exportconst SearchResult = () => {
const myRef = useRef<null | HTMLDivElement>(null)
const [oldData, setOldData] = useEffect([])
const executeScroll = () => {
myRef.current?.scrollIntoView()
}
const addMoreData = () => {
let data = {
id: 1,
content: 'dummy content'
}
let temp = [...oldData]
temp.push(data)
setOldData(temp)
executeScroll()
}
return (
<div>
<button onClick={addMoreData}>Click Me</button>
<ChildComponant
ref={myref}
someData={oldData}
/>
</div>
)
}
ChildComponant.tsx
import React from'react'
interface dummyModel {
id: number
content: string
}
exportinterface ChildComponantProps {
someData: dummyModel[]
}
exportconst ChildComponant = React.forwardRef<HTMLDivElement, ChildComponantProps>(({
someData
}, ref) => {
return {
<div>
<div className="parent_div"> // We add content into this dynamically
{someData.map((v,k) => {
return (
<div className="child_div">
{v.content}
</div>
)
})
}
</div>
<div ref={ref}></div>
</div>
}
})
所以请帮我解决这个问题,因为我已经尝试了很多东西,但仍然没有得到解决。提前致谢。
解决方案
您需要在数据更新后执行滚动,但在您的情况下,您在 setState(这是异步的)之后立即调用它。我建议您在 oldData 更新时调用 executeScroll:
useEffect(() => {
executeScroll()
},[oldData])
推荐阅读
- node.js - Puppeteer 通过 XPath 单击按钮不起作用
- css - 对所有内容使用 rem 单位并使用 vw 单位设置 HTML 元素的字体大小。有什么缺点?
- html - 如何在屏幕宽时设置响应图像的默认高度,并在屏幕宽度窄时按比例缩放?
- java - 监视器中的并发性,同时有两个函数调用来自同一个其他对象
- sass - 顺风 scss 地图
- python - 熊猫通过减去每日平均值从数据中删除每日季节性
- class - 一起定义 fmt::Display 和 fmt::Debug
- java - 检查二维数组中的特定索引以宣布获胜者
- mysql - 从一对多关系中获取数据作为数组
- selenium - 如何使用 selenium chromedriver 启用保存密码