reactjs - 使用 React/Material UI 自动滚动到列表底部(显示输入的最新消息)
问题描述
我目前正在设计一个聊天机器人来发送销售查询消息,我无法让它自动滚动到列表底部。而是发生了这种情况:
这是我用于映射所述消息的代码:
<List className={classes.messageArea}>
{chatHistory.map(item => {
return (
<ListItem key={item}>
<Grid container>
<Grid item xs={12}
className={item.sent ? classes.msgsUs : classes.msgsScotti}>
<ListItemText align={item.sent ? "right" : "left"}
primary={item.text}/>
</Grid>
<Grid item xs={item.sent ? 11 : 12}>
<ListItemText align={item.sent ? "right" : "left"}
secondary={moment(item.time).format('HH:mm')}/>
</Grid>
</Grid>
</ListItem>
)
})}
</List>
我如何让它在发送新消息时自动滚动到底部,尝试了各种方法但没有完成任何事情。感谢您花时间看这个。
解决方案
我给你做了一个例子。您需要做的主要事情是设置对列表状态更改的依赖关系。发生这种情况时,您需要滚动窗口。一种方法是使用 Element.scrollIntoView() 函数。
我在这里包含了完整的示例:https ://codesandbox.io/s/confident-microservice-vibw8?file=/src/App.js
主要部分在这里,每当列表更改时,我们都会在其中运行 API 函数:
useEffect(() => {
if (scrollRef.current) {
scrollRef.current.scrollIntoView({ behaviour: "smooth" });
}
}, [list]);
推荐阅读
- ios - 执行 segue 后删除 ViewController
- c# - 在相机移动时使用 Camera.main.ScreenToWorldPoint
- c# - 无法使用 DotNetZip 设置密码
- ansible - 修改目标机器上用于复制的源文件
- android - 将 EditText 传递给另一个活动,它向我展示了任何东西
- ios - 双重返回上一个视图 - Swift
- windows - 如何从命令提示符运行 VSCode
- c++ - 不同类型的模板中的模板问题
- angular - Angular - 如何从数据(字段)的多个属性中过滤(搜索)数据?
- laravel - Laravel 关系查找 UUID