我正在构建一个消息传递应用程序。我使用setTimeout每隔5秒从后端检索一次消息日志,并将其存储在一个状态变量中。我让它也滚动到聊天窗口的底部每次超时,但我试图使它只发生在有一个新的消息在响应对象。问题是我无法访问检索它的函数中的状态变量。理想情况下,我会将响应对象的长度与状态变量的当前长度进行比较,以确定是否存在新的响应。
这是我的代码:
import React from "react"
import axios from "axios"
export default function Messaging(props) {
const [messages, setMessages] = React.useState([])
const getMessages = () => {
const config = {
method: "get",
url: "localhost:3001/get-messages",
}
axios(config)
.then((response) => {
console.log(messages.length) // prints 0 in reference to the initial state value
if (response.data.get.records.length !== messages.length) {
// function to scroll to the bottom of the chat window
}
setMessages(response.data.get.records)
setTimeout(getMessages, 5000)
})
}
console.log(messages.length) // prints actual value correctly
// Initial retrieval of chat log
React.useEffect(() => {
getMessages()
}, [])
}
在处理逻辑方面,我也愿意接受更好的建议。提前道谢!
setmessages
将在下一次呈现中更新messages
考虑到这一点,您可以创建一种效果,即每当messages.length
发生更改时,就会滚动到您的元素
import React from "react"
import axios from "axios"
export default function Messaging(props) {
const [messages, setMessages] = React.useState([])
React.useEffect(() => {
// store the id to clear it out if required
let timeoutId
const getMessages = () => {
const config = {
method: "get",
url: "localhost:3001/get-messages",
}
axios(config)
.then((response) => {
// store the messages
setMessages(response.data.get.records)
// here we tell to poll every 5 seconds
timeoutId = setTimeout(getMessages, 5000)
})
}
getMessages()
return () => {
if (timeoutId) {
clearTimeout(timeoutId)
}
}
}, [setMessages])
React.useEffect(() => {
// code here to scroll
// this would only trigger if the length of messages changes
}, [messages.length])
}
我还在您的第一个效果中添加了清理,因此当组件卸载时,您将清理timeout
并且避免任何额外的请求
问题内容: 这(我的代码的简化版本)不起作用: 为什么?我要访问,因为如果失败,我想在上面记录错误。 递归地调用自身以创建目录列表,因此我担心将整体传递给自身(如中所述)可能会损害性能。 有没有一种方法可以在不传递参数的情况下访问内部?(PHP 5.2.x +) 编辑: 如果代码看起来像这样呢? 问题答案: 您必须将其传递给函数: 或将其声明为global: 如果变量不是全局变量,而是在外部函数中
我想在构造函数中访问多个位置的状态值。当我在构造函数中输入console.log(this)时,我可以看到可以访问特定的值,但是当我输入console.log this.state时,我没有定义。 这就是我想象的工作方式(我想访问CSSValue中的状态): 但是,当我运行此代码: 然后我在控制台中得到这个: 但是当我将console.logconsole.log(this.state)它打印未定
问题内容: 我认为这是异步的问题,但我不知道解决方案。 我的问题是,如果我尝试在函数外部访问它,则返回undefined,并且我不知道如何在页面上显示表格。 问题答案: 问题是Selling.find是异步的,可能在执行this.table = table时尚未完成。尝试类似以下的方法。 这将确保在获取结果并填充表之后才使用表。
我在AWS上创建了Cassandra有状态/无头集群,它在集群内运行良好。唯一的问题是我无法从集群外部访问它。我尝试了Kubernetes文档或StackOverflow引用中的大部分内容,但仍然无法解决它。 我有一个AWS的安全小组。这里是我的服务和statefulset yaml文件。
我正在调用这个函数。因为它在增加值,但是当我访问它时,它返回以前的值。我想访问同一函数中最新更新的值,我应该做什么。 如何访问同一函数中的最新状态值
我在数字海洋水滴上建立了一个Django站点,但是静态文件似乎无法访问。 环顾四周寻找解决方案,我认为问题在于服务器设置(Nginx),但由于这对我来说更为新,我想在弄糟它之前验证一下。 CSS被放置在中,该文件夹不能使用浏览器访问: IPadress/static/css/style。css在css上出现“404未找到”错误 我刚刚找到了Nginx错误日志,其中声明在中查找静态文件,但该日志不存