reactjs - useEffect 没有调用合适的时间,所以 useEffect 中的 useState 不起作用
问题描述
我想显示来自服务器的实时数据数组(JSON 形式)。
function ServerTest(){
var a = new Array();
const client = createClient();
const queue = v4();
var a = new Array();
var cl = new Array();
const [valueA, setValueA]=useState(a)
client.onConnect = function () {
subscribe(client, 'admin', queue, (payload:any) => {
var c : any;
var tmp: any
a=payload.Conversations
if(a!==null){
a.map((item:any)=>{
cl.push(item.name)
})
}
});
publish(client, 'api', 'admin', queue, {});
}
client.activate();
useEffect(()=>{
setValueA(cl)
console.log(valueA)
},cl)
return (
<div>A: {valueA} </div>
)
}
export default ServerTest
在 useEffect 中,console.log(valueA) 有效,但只有 setValueA(cl) 无效。我认为这是因为当 'cl' 发生变化时没有调用 useEffect 。
解决方案
问题是 React 不知道你的cl
变量已经改变(因为它不是一个状态)
此外,您一开始就不需要cl
。
只需将初始连接包装在 useEffect 中,并setValueA
在获得数据时调用。
function ServerTest(){
const queue = v4();
const [valueA, setValueA]= useState()
useEffect(() => {
const client = createClient();
client.onConnect = function () {
subscribe(client, 'admin', queue, (payload:any) => {
if(payload.Conversations!==null){
setValueA(payload.Conversations.map((item:any)=>item.name))
}
});
publish(client, 'api', 'admin', queue, {});
}
client.activate();
}, [])
return (
<div>A: {valueA} </div>
)
}
推荐阅读
- python-3.x - 试图从给定的一系列输入中返回第二低等级的持有者
- javascript - 如何操纵每个滚动运动的值?
- python - oauth2client.client.ApplicationDefaultCredentialsError
- python - 将字符串中的 char 与其索引号相乘
- java - 配置为侦听端口 8080 的 Tomcat 连接器无法启动。端口可能已在使用中或连接器可能配置错误
- r - 当我将参数名称作为字符向量时,如何生成“alist”?
- git - git commit --amend 不提交更改
- laravel - Laravel:雄辩的 HAVING 返回无效的数据集
- reactjs - 用承诺对 redux 问题做出反应,因为我的变量为 null
- python - Python tabula read_pdf 打开 java 控制台窗口