我已从 Firebase 中提取数据。数据就在那里,console.log 证实了这一点。
(2) [{…}, {…}]
0:
id: 1.417253735436239
name: {Jack: true}
__proto__: Object
1:
id: 1.7540006580031215
name: {Jack: true, Jill: true}
__proto__: Object
length: 2
但是,我需要迭代这些数据来列出名称,但是当我尝试将此数据 setState 到数组中(明确在构造函数中声明)时,我得到“无法设置未定义的属性“setState”。
以下是 setList 函数不起作用的代码:
let users = [];
listRef.on("value", function (snapshot) {
users.push({
id: 1 + Math.random(),
name: snapshot.val()
})
console.log(users);
});
function setList(users){
this.setState({ names: users})
}
setList();
});
}
Names 在构造函数的 this.state 中声明为数组。
我哪里出错了?
最佳答案
我已经克服了这个错误。在 block 内使用函数是错误的。我将 setState 从大括号中移出,并且没有该函数。
setName = e => {
e.preventDefault()
this.setState({ [e.target.name]: e.target.value })
let textBox = document.getElementById('inputDivId');
textBox.style.display = "flex";
let messagesBox = document.getElementById('messagesDivId');
messagesBox.style.display = "flex";
let thinkDel = document.getElementById('options');
thinkDel.style.display = "flex";
let nameBox = document.getElementById('nameDivId');
nameBox.style.display = "none";
// Add ourselves to presence list when online.
let name = this.state.name;
// let names = this.state.names;
let connectedRef = firebase.database().ref('.info/connected');
// let users = [];
connectedRef.on('value', function (snap) {
if (snap.val() === true) {
const con = listRef.child(name);
con.onDisconnect().remove();
con.set(true);
}
let users = [];
listRef.on("value", function (snapshot) {
users.push({
id: 1 + Math.random(),
name: snapshot.val()
})
setList(users);
});
function setList(users) {
this.setState({
names: users
})
}
});
}
但是我仍然没有根据需要获取 this.state.names 中的数据!
关于javascript - 如何将 Firebase 查询中的对象推送到 this.state,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58878373/